【Python】透過Python備份itpub部落格

小亮520cl發表於2016-01-29
最近在學習python語言,今天練習了一下如何利用Python備份itpub部落格

1,備份一篇部落格
  1. 以http://blog.itpub.net/29096438/viewspace-1982636/這篇部落格為例
  2. 檢視原始碼可以看到標題部分的原始碼為
  3. <a href<a ="/29096438/viewspace-1982636/">【Python】python練習 

  4. 我們主要是想提取出中間紅色色部分的URL,然後找到這篇文章的正文進行分析,然後提取進行下載。首先,假

    設已經得到這個字串,然後研究如何提取這個URL,觀察發現,對於所有的這類字串,都有一個共同點,那
    就是都含有子串'<a 'href="</a 'href=/29096438",那麼我們可以用最笨的方式---查詢子串進行定界。

    1. # -*- coding: cp936 -*-
    2. import re
    3. import urllib2
    4. str = 'http://blog.itpub.net/29096438/viewspace-1982636/">【Python】python練習'   ---自己手工補全網址,原始碼裡面的href不全

    5. fname=re.match('(.*)',str)
    6. fname2=fname.group(1)+'.html'
    7. print fname2

    8. start = str.find(r'href=')
    9. start += 6
    10. end = str.find('viewspace')
    11. end += 17
    12. url = str[start : end]
    13. print url


    14. text=urllib2.urlopen(url).read()
    15. f=open(fname2,'w')
    16. f.write(text)
    17. f.close()
    執行程式碼發現部落格已經備份下來了
  5. 程式碼被轉義了


2,備份所有部落格
  1. 首先進入目錄列表檢視原始碼
  2. 所有文章的URL都符合一個模式,除了文章id不一樣,29096438就是我們的使用者id吧,每個人都有個獨特的id,29096438就是我的使用者id
  3. <a href<a ="/29096438/viewspace-1981855/">【Mysql】sysbench基準測試工具 
  4. <a href<a ="/29096438/viewspace-1982636/">【Python】python練習


      程式碼:

      點選(此處)摺疊或開啟

      1. # -*- coding: cp936 -*-
      2. import re 
         import urllib2
         for page in range(1,input('how many page do you want down:')): ###這兒就是輸入你希望下載的頁數,輸入你的總頁數吧
             url='http://blog.itpub.net/29096438/abstract/%d/'% page        ####迴圈不同的頁
             text = urllib2.urlopen(url).read()
             pattern = r'.*' 
             regex = re.compile(pattern) 
             urlList = re.findall(regex,text) ####透過正規表示式找到所有文章的href,此時的href是帶上標題的
         
             for i in urlList:
                 newi=re.sub('/29096438','http://blog.itpub.net/29096438',i).decode('utf-8') ###補全文章的href,,因為我們獲取到的href是不全
        的,少了http://blog.itpub.net這一段,decode編碼是為了解決亂碼問題
                 #print newi
         
                 fname=re.match('(.*)',newi)
                 fname2=fname.group(1)+'.html' ####獲取文章的標題名
                 #print fname2
         
         
                 start = newi.find(r'href=') 
                 start += 6
                 end = newi.find('viewspace')
                 end += 17
                 url2 = newi[start : end]
                 print url2                                ####去掉上面href中的標題 只獲取href的網址部分
         
                 try:
                    text2 = urllib2.urlopen(url2).read()
                    f = open(fname2,'w')  
                    f.write(text2)  
                    f.close()
                 except Exception,e:
                    print e
                    pass

      3. 程式碼有轉義,注意被轉換部分


      改進,用beautiful模組取出正文部分
               try:
                r=requests.get(url2)
                soup=bsp(r.content)
                cont=soup.find('div',{'class':'Blog_wz1'})
                f=open(fname2,'w')
                f.write(str(cont))
                f.close()
               except:
                pass



      執行結果: 

      點選(此處)摺疊或開啟

      1. how many page do you want down:12 ---我的文章總共12頁,所以輸了個12 
      2. <a href="http://blog.itpub.net/29096438/viewspace-1682206/">【Mysql】搭建mysql-cluster</a>
      3.  
      4. 【Mysql】搭建mysql-cluster.html
      5.  
      6. http://blog.itpub.net/29096438/viewspace-1682206
      7.  
      8. coercing to Unicode: need string or buffer, _sre.SRE_Match found
      9.  
      10. <a href="http://blog.itpub.net/29096438/viewspace-1982636/">【Python】python練習</a>
      11.  
      12. 【Python】python練習.html
      13.  
      14. http://blog.itpub.net/29096438/viewspace-1982636
      15.  
      16. coercing to Unicode: need string or buffer, _sre.SRE_Match found
      17.  
      18. <a href="http://blog.itpub.net/29096438/viewspace-1981855/">【Mysql】sysbench基準測試工具</a>
      19.  
      20. 【Mysql】sysbench基準測試工具.html
      21.  
      22. http://blog.itpub.net/29096438/viewspace-1981855
      23.  
      24. coercing to Unicode: need string or buffer, _sre.SRE_Match found
      25.  
      26. <a href="http://blog.itpub.net/29096438/viewspace-1981811/">【Mysql】MySQL查詢計劃key_len全知道</a>
      27.  
      28. 【Mysql】MySQL查詢計劃key_len全知道.html
      29.  
      30. http://blog.itpub.net/29096438/viewspace-1981811
      31.  
      32. coercing to Unicode: need string or buffer, _sre.SRE_Match found
      33.  
      34. <a href="http://blog.itpub.net/29096438/viewspace-1980112/">【Pyrhon】Python在自動化運維時經常會用到的方法</a>
      35.  
      36. 【Pyrhon】Python在自動化運維時經常會用到的方法.html
      37.  
      38. http://blog.itpub.net/29096438/viewspace-1980112
      39.  
      40. coercing to Unicode: need string or buffer, _sre.SRE_Match found
      41.  
      42. <a href="http://blog.itpub.net/29096438/viewspace-1979572/">【Python】Python連線mysql</a>... 
      43. .... 
      44. .... 
      45. ...


    可以看到下載的結果


<a href="(.*.html)" ',data)="" 程式碼還有一些bug需要完善的地方,但是能做到基本的備份部落格的功能了(僅自己可見的不能備份),我找了些備份部落格的工具都不能備份itpub的部落格,如果你們有好的備份工具希望在下面告訴我一聲!3Q
<a href="(.*.html)" ',data)=""

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1983945/,如需轉載,請註明出處,否則將追究法律責任。

相關文章