###1, 引言python
Python開源網絡爬蟲項目啓動之初,咱們就把網絡爬蟲分紅兩類:即時爬蟲和收割式網絡爬蟲。爲了使用各類應用場景,該項目的整個網絡爬蟲產品線包含了四類產品,以下圖所示: git
本實戰是上圖中的「獨立python爬蟲」的一個實例,以採集安居客房產經紀人(http://shenzhen.anjuke.com/tycoon/nanshan/p1/ )信息爲例,記錄整個採集流程,包括python和依賴庫的安裝,即使是python初學者,也能夠跟着文章內容成功地完成運行。github
###2,Python和相關依賴庫的安裝windows
2.1,安裝Python3.5.2api
2.2,Lxml 3.6.0網絡
2.3,下載網頁內容提取器程序app
網頁內容提取器程序是GooSeeker爲開源Python即時網絡爬蟲項目發佈的一個類,使用這個類,能夠大大減小信息採集規則的調試時間,具體參看《Python即時網絡爬蟲項目: 內容提取器的定義》python爬蟲
###3,網絡爬蟲的源代碼框架
# _*_coding:utf8_*_ # anjuke.py # 爬取安居客房產經紀人 from urllib import request from lxml import etree from gooseeker import GsExtractor class Spider: def getContent(self, url): conn = request.urlopen(url) output = etree.HTML(conn.read()) return output def saveContent(self, filepath, content): file_obj = open(filepath, 'w', encoding='UTF-8') file_obj.write(content) file_obj.close() bbsExtra = GsExtractor() # 下面這句調用gooseeker的api來設置xslt抓取規則 # 第一個參數是app key,請到GooSeeker會員中心申請 # 第二個參數是規則名,是經過GooSeeker的圖形化工具: 謀數臺MS 來生成的 bbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e" , "安居客房產經紀人") url = "http://shenzhen.anjuke.com/tycoon/nanshan/p" totalpages = 50 anjukeSpider = Spider() print("爬取開始") for pagenumber in range(1 , totalpages): currenturl = url + str(pagenumber) print("正在爬取", currenturl) content = anjukeSpider.getContent(currenturl) outputxml = bbsExtra.extract(content) outputfile = "result" + str(pagenumber) +".xml" anjukeSpider.saveContent(outputfile , str(outputxml)) print("爬取結束")
運行過程以下:ide
請注意:爲了讓源代碼更整潔,也爲了讓爬蟲程序更有通用性,抓取規則是經過api注入到內容提取器bbsExtra中的,這樣還有另一個好處:若是目標網頁結構變化了,只需經過MS謀數臺從新編輯抓取規則,而本例的網絡爬蟲代碼不用修改。爲內容提取器下載採集規則的方法參看《Python即時網絡爬蟲:API說明》。
###4,爬蟲結果
在項目目錄下能夠看到多個result**.xml文件,文件內容以下圖所示:
###5,總結
由於信息採集規則是經過api下載下來的,因此,本案例的源代碼顯得十分簡潔。同時,整個程序框架變得很通用,由於最影響通用性的採集規則是從外部注入的。
###6,集搜客GooSeeker開源代碼下載源
###7,文檔修改歷史
2016.07.15:V1.0