Python爬蟲實戰(4):豆瓣小組話題數據採集—動態網頁
注釋:上一篇《Python爬蟲實戰(3):安居客房產經紀人信息採集》,訪問的網頁是靜態網頁,有朋友模仿那個實戰來採集動態載入豆瓣小組的網頁,結果不成功。本篇是針對動態網頁的數據採集編程實戰。
Python開源網路爬蟲項目啟動之初,我們就把網路爬蟲分成兩類:即時爬蟲和收割式網路爬蟲。為了適應各種應用場景,GooSeeker的整個網路爬蟲產品線包含了四類產品,如下圖所示:
2,Python和相關依賴庫的安裝
- 運行環境:Windows10
2.1,安裝Python3.5.2
- 官網下載鏈接: https://www.python.org/ftp/python/3.5.2/python-3.5.2.exe
- 下載完成後,雙擊安裝。
- 這個版本會自動安裝pip和setuptools,方便安裝其它的庫
2.2,Lxml 3.6.0
- Lxml官網地址: http://lxml.de/
- Windows版安裝包下載: http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
- 對應windows下python3.5的安裝文件為 lxml-3.6.0-cp35-cp35m-win32.whl
- 下載完成後,在windows下打開一個命令窗口,,切換到剛下載的whl文件的存放目錄,運行pip install lxml-3.6.0-cp35-cp35m-win32.whl
2.3,下載網頁內容提取器程序
網頁內容提取器程序是GooSeeker為開源Python即時網路爬蟲項目發布的一個類,使用這個類,可以大大減少數據採集規則的調試時間,具體參看《Python即時網路爬蟲項目: 內容提取器的定義》
- 下載地址: https://github.com/FullerHua/gooseeker/core/gooseeker.py
- 把gooseeker.py保存在項目目錄下
2.4,安裝selenium
- pip install selenium
2.5,PhantomJS下載
- 下載地址 http://phantomjs.org/download.html
- 把下載得到的phantomjs-2.1.1-windows.zip解壓到本機的某個文件夾下
- 把解壓後的文件夾中的phantomjs.exe的完整路徑加文件名記錄下來,用來替換下面代碼的 browser = webdriver.PhantomJS(executable_path=C:phantomjs-2.1.1-windowsbinphantomjs.exe) 這一行中的兩個單引號之間的內容。
# _*_coding:utf8_*_n# douban.pyn# 爬取豆瓣小組討論話題nnfrom urllib import requestnfrom lxml import etreenfrom gooseeker import GsExtractornfrom selenium import webdrivernnclass PhantomSpider:n def getContent(self, url):n browser = webdriver.PhantomJS(executable_path=C:phantomjs-2.1.1-windowsbinphantomjs.exe)n browser.get(url)n time.sleep(3)n html = browser.execute_script("return document.documentElement.outerHTML")n output = etree.HTML(html)n return outputnn def saveContent(self, filepath, content):n file_obj = open(filepath, w, encoding=UTF-8)n file_obj.write(content)n file_obj.close()nndoubanExtra = GsExtractor() n# 下面這句調用gooseeker的api來設置xslt抓取規則n# 第一個參數是app key,請到GooSeeker會員中心申請n# 第二個參數是規則名,是通過GooSeeker的圖形化工具: 謀數台MS 來生成的ndoubanExtra.setXsltFromAPI("ffd5273e213036d812ea298922e2627b" , "豆瓣小組討論話題") nnurl = "https://www.douban.com/group/haixiuzu/discussion?start="ntotalpages = 5ndoubanSpider = PhantomSpider()nprint("爬取開始")nnfor pagenumber in range(1 , totalpages):n currenturl = url + str((pagenumber-1)*25)n print("正在爬取", currenturl)n content = doubanSpider.getContent(currenturl)n outputxml = doubanExtra.extract(content)n outputfile = "result" + str(pagenumber) +".xml"n doubanSpider.saveContent(outputfile , str(outputxml))nnprint("爬取結束")n
運行過程如下:
- 將上面的代碼保存到douban.py中,和前面2.3步下載的提取器類gooseeker.py放在同一個文件夾中
- 打開Windows CMD窗口,切換當前目錄到存放douban.py的路徑(cd xxxxxxx)
- 運行 python douban.py
請注意:為了讓源代碼更整潔,也為了讓爬蟲程序更有通用性,抓取規則是通過api注入到內容提取器bbsExtra中的,這樣還有另外一個好處:如果目標網頁結構變化了,只需通過MS謀數台重新編輯抓取規則,而本例的網路爬蟲代碼不用修改。為內容提取器下載採集規則的方法參看《Python即時網路爬蟲:API說明—下載內容提取器》。
4,爬蟲結果
在項目目錄下可以看到多個result**.xml文件,文件內容如下圖所示:
5,總結
因為信息採集規則是通過api下載下來的,所以,本案例的源代碼顯得十分簡潔。同時,整個程序框架變得很通用,因為最影響通用性的採集規則是從外部注入的。
6,集搜客GooSeeker開源代碼下載源
1. GooSeeker開源Python即時網路爬蟲GitHub源
7,文檔修改歷史
2016-07-14:V1.0
推薦閱讀:
※學習彙編語言有什麼好處?
※編程初學者學什麼語言好?
※為什麼C++語法這麼複雜?
※有沒有一本講解gpu和CUDA編程的經典入門書籍?
※快手(AAuto Quicker)有哪些優點或不足,該軟體的背景說明?