以下談論的 scrapy 基于 0.20.2 版本(當前最新版本是 0.22.0 ),python 2.7.6。
開發環境是Windows 7 sp1。
互聯網上比較有價值的參考資料
1. Scrapy入門教程
對官網文檔的翻譯,主要講了 scrapy 的基本使用。創建一個工程,使用 item 和 spider 。我們會簡單涉及到官方教程的內容。
這篇文章并未涉及到代碼細節,介紹了一些使用 scrapy 的經驗,用的是較老的0.9版本。我們會對該文章涉及到的內容簡單展開。
一 安裝 scrapy
因為不同的版本 scrapy 依賴庫變換很大,網上的安裝教程版本太老,所以我的建議是直接安裝 scrapy ,運行 scrapy 時 python 打印的錯誤可以看出是缺少了哪個庫,缺了哪個安裝哪個。
安裝 scrapy 后 會多出 python/Scripts 目錄,記得添加到環境變量,這樣才能直接在命令行使用“scrapy”命令。
二 創建項目
在命令行運行 “scrapy startPRoject 項目名”可以直接在當前目錄創建 scrapy 工程。
工程目錄會有如下文件:
scrapy.cfg
配置文件,開發中基本用不到。
ajian/item.py
這里主要處理遞歸爬取和返回頁面數據。
ajian/pipelines.py
返回的數據會傳到這里,進行下一步處理。存儲到數據庫或者進行分析,隨你喜歡。
ajian/settings.py
設置文件,有很多有趣的設置,比如是深度還是廣度爬,對每個IP的爬蟲數,每個域名的爬蟲數,總爬蟲數,爬蟲延時等等。
ajian/__init__.py
ajian/spider/__init__.py
上述兩個文件是 python 包要求的文件,對 scrapy 作用不大。
三 構建第一個蜘蛛
使用命令構建的項目默認生成了 pipelines.py 卻沒有生成 spider.py 文件,有點讓人摸不著頭腦。不過無所謂,我們自己寫一個就好了。在 spider 新建文件 ajian_spider.py 內容如下。
from scrapy.spider import BaseSpiderclass AJianSpider(BaseSpider): name = "ajian" start_urls = [ "http://www.163.com/" ] def parse(self, response): print response.body
其中 name 變量和 start_urls 是必須的,name 變量是啟動 scrapy 抓取時指定的蜘蛛名, start_urls 是初始抓取的 url,是個 list,可以指定多個?,F在一個最簡單的蜘蛛就做好了,只有一個功能,輸出163的頁面內容。
這個蜘蛛太遜了,我們加上最基本的功能,返回頁面內容、遞歸爬取。
在講返回頁面內容和遞歸爬取之前,先了解一些背景知識。
spider.py 文件中的 parse 函數實際是個迭代器,python 有一個命令 yield ,有一篇文章很詳細的說明了 yield 的作用。這里簡略描述一下。當調用 yield 時,不僅會返回值,還會記錄當前函數的狀態,在下次調用函數時,會從調用 yield 的下一句開始執行。相當于函數執行到一半,先返回給調用者一個結果,再接著執行。
parse 可以返回兩種對象,一種是 item 另外一種是 Request,分別對應著頁面內容和遞歸請求。
如果返回的是Request,那么會將這個返回結果放到待抓取列表;如果返回的是item,則會傳遞到pipelines.py進行處理。
待續。。。
新聞熱點
疑難解答