Python爬蟲實戰(3):安居客房產經紀人信息採集

1, 引言

Python開源網路爬蟲項目啟動之初,我們就把網路爬蟲分成兩類:即時爬蟲和收割式網路爬蟲。為了使用各種應用場景,該項目的整個網路爬蟲產品線包含了四類產品,如下圖所示:

本實戰是上圖中的「獨立python爬蟲」的一個實例,以採集安居客房產經紀人(shenzhen.anjuke.com/tyc )信息為例,記錄整個採集流程,包括python和依賴庫的安裝,即便是python初學者,也可以跟著文章內容成功地完成運行。

2,Python和相關依賴庫的安裝

  • 運行環境:Windows10

2.1,安裝Python3.5.2

  • 官網下載鏈接: python.org/ftp/python/3
  • 下載完成後,雙擊安裝。
  • 這個版本會自動安裝pip和setuptools,方便安裝其它的庫

2.2,Lxml 3.6.0

  • Lxml官網地址: lxml.de/
  • Windows版安裝包下載: lfd.uci.edu/~gohlke/pyt
  • 對應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保存在項目目錄下

3,網路爬蟲的源代碼

# _*_coding:utf8_*_n# anjuke.pyn# 爬取安居客房產經紀人nnfrom urllib import requestnfrom lxml import etreenfrom gooseeker import GsExtractornnclass Spider:n def getContent(self, url):n conn = request.urlopen(url)n output = etree.HTML(conn.read())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()nnbbsExtra = GsExtractor() n# 下面這句調用gooseeker的api來設置xslt抓取規則n# 第一個參數是app key,請到GooSeeker會員中心申請n# 第二個參數是規則名,是通過GooSeeker的圖形化工具: 謀數台MS 來生成的nbbsExtra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e" , "安居客房產經紀人") nnurl = "http://shenzhen.anjuke.com/tycoon/nanshan/p"ntotalpages = 50nanjukeSpider = Spider()nprint("爬取開始")nnfor pagenumber in range(1 , totalpages):n currenturl = url + str(pagenumber)n print("正在爬取", currenturl)n content = anjukeSpider.getContent(currenturl)n outputxml = bbsExtra.extract(content)n outputfile = "result" + str(pagenumber) +".xml"n anjukeSpider.saveContent(outputfile , str(outputxml))nnprint("爬取結束")n

運行過程如下:

  1. 將上面的代碼保存到anjuke.py中,和前面2.3步下載的提取器類gooseeker.py放在同一個文件夾中
  2. 打開Windows CMD窗口,切換當前目錄到存放anjuke.py的路徑(cd xxxxxxx)
  3. 運行 python anjuke.py

請注意:為了讓源代碼更整潔,也為了讓爬蟲程序更有通用性,抓取規則是通過api注入到內容提取器bbsExtra中的,這樣還有另外一個好處:如果目標網頁結構變化了,只需通過MS謀數台重新編輯抓取規則,而本例的網路爬蟲代碼不用修改。為內容提取器下載採集規則的方法參看《Python即時網路爬蟲:API說明》。

4,爬蟲結果

在項目目錄下可以看到多個result**.xml文件,文件內容如下圖所示:

5,總結

因為信息採集規則是通過api下載下來的,所以,本案例的源代碼顯得十分簡潔。同時,整個程序框架變得很通用,因為最影響通用性的採集規則是從外部注入的。

6,集搜客GooSeeker開源代碼下載源

1. GooSeeker開源Python網路爬蟲GitHub源

7,文檔修改歷史

2016.07.08:V1.0


推薦閱讀:

TAG:Python | 爬虫计算机网络 | API |