如何用Python抓取動態頁面信息

jopen 10年前發布 | 148K 次閱讀 Python 網絡爬蟲

問題來源:

        很早之前,學習Python web編程的時候,就涉及一個Python的urllib。可以用urllib.urlopen("url").read()可以輕松讀取頁面上面的靜態信息。但是,隨著時代的發展,也來越多的網頁中更多的使用javascript、jQuery、PHP等語言動態生成頁面信息。因此,用urllib再去抓取頁面HTML就不足以達到我們想要的效果。

解決思路:

        有一個思路最為簡單的思路可以動態解析頁面信息。urllib不可以解析動態信息,但是瀏覽器可以。在瀏覽器上展現處理的信息其實是處理好的HTML文檔。這為我們抓取動態頁面信息提供了很好的思路。在Python中有一個很有名的圖形庫——PyQt。PyQt雖然是圖形庫,但是他里面 QtWebkit。這個很實用。谷歌的Chrome和蘋果的Safari都是基于WebKit內核開發的,所以我們可以通過PyQt中得QtWebKit 把頁面中的信息讀取加載到HTML文檔中,再解析HTML文檔,從HTML文檔中提取我們想用得信息。

所需材料:

作者本人實用Mac OS X。應該在Windows和Linux平臺也可以采用相同的辦法。

1、Qt4 library

Library,而不是Creator。Library在Mac的默認安裝路徑下,應該是/home/username/Developor/,不要改變Qt4的默認安裝路徑。否則可能安裝失敗。

官方網址:http://qt-project.org/downloads

 

2、SIP、PyQt4

這兩個軟件可以在在PyQt的官網找到。下載的是它的源碼。Mac和Linux需要自己編譯。

下載地址是:http://www.riverbankcomputing.co.uk/software/pyqt/download

在終端切換到文件解壓后的目錄中。

在終端中輸入

python configure.py

make

sudo make install

進行安裝編譯。

SIP和PyQt4兩個安裝方法相同。但是PyQt4依賴SIP。所以先安裝SIP再安裝PyQt4

 

1、2兩步完成之后,Python的PyQt4的模塊就安裝好了。在Python shell中輸入import PyQt4看看能不能找到PyQt4的模塊。

 

3、Spynner

spynner是一個QtWebKit的客戶端,它可以模擬瀏覽器,完成加載頁面、引發事件、填寫表單等操作。

這個模塊可以在Python的官網找到。

下載地址: https://pypi.python.org/pypi/spynner/2.5

解壓后,cd到安裝目錄,然后輸入sudo python configure.py install安裝該模塊。

這樣Spynner模塊就安裝完成了,在python shell中試試import spynner看看該模塊有沒有安裝完成。

 

Spynner的簡單使用

Spynner的功能十分強大,但是由于本人能力有限,就介紹一下如何顯示網頁的源碼吧。

    #! /usr/bin/python  
    #-*-coding: utf-8 -*-  

    import spynner  

    browser = spynner.Browser()  
    #創建一個瀏覽器對象  

    browser.hide()  
    #打開瀏覽器,并隱藏。  

    browser.load("http://www.baidu.com")  
    #browser 類中有一個類方法load,可以用webkit加載你想加載的頁面信息。  
    #load(是你想要加載的網址的字符串形式)  

    print browser.html.encode("utf-8")  
    #browser 類中有一個成員是html,是頁面進過處理后的源碼的字符串.  
    #將其轉碼為UTF-8編碼  

    open("Test.html", 'w+').write(browser.html.encode("utf-8"))  
    #你也可以將它寫到文件中,用瀏覽器打開。  

    browser.close()  
    #關閉該瀏覽器  

通過這個程序,就可以比較容易的顯示webkit處理的頁面HTML源碼了。

 

spynner應用

下面介紹一下spynner的簡單應用,通過簡單的程序,可以獲取你在瀏覽器中看到的頁面的全部圖片。用HTMLParser、BeautifulSoup等都可以完成HTMLParser文檔的解析。而我選擇HTMParser。

    #!/usr/bin/python  

    import spynner  
    import HTMLParser  
    import os  
    import urllib  

    class MyParser(HTMLParser.HTMLParser):  

      def handle_starttag(self, tag, attrs):  
        if tag == 'img':  
          url = dict(attrs)['src']  
          name = os.path.basename(dict(attrs)['src'])  
          if name.endswith('.jpg') or name.endswith('.png') or name.endswith('gif'):  
            print "Download.....", name  
            urllib.urlretrieve(url, name)  


    if __name__ == "__main__":  
      browser = spynner.Browser()  

      browser.show()  

      browser.load("http://www.artist.cn/snakewu1994/StyleBasis_Four/en_album_607236.shtml")  

      Parser = MyParser()  

      Parser.feed(browser.html)  

      print "Done"  

      browser.close()  
通過這個程序,可以下載你在頁面上看到的全部圖片。簡單的幾行程序就完成了這個艱巨的任務。實現了圖片的批量處理。這真是Python語言的優勢,再艱巨的任務交給第三方吧。

來自:http://blog.csdn.net/jamesxu182/article/details/38171217

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!