Scrapy是一個使用Python語言(基於Twisted框架)編寫的開源網絡爬蟲框架,它簡單易用、靈活易拓展、開發社區活躍,並且是跨平臺的。在Linux、 MaxOS以及Windows平臺都可以使用。
在任意操作系統下,可以使用pip安裝Scrapy,例如:
然後,在shell中測試能否執行Scrapy這條命令:
創建一個Scrapy爬蟲:
創建好一個名為example的項目後,查看項目目錄下的文件,顯示如下:
實現爬蟲的Python文件應位於exmaple/spiders目錄下,在該目錄下創建新文件Demo.py:
下面是spiders中Demo.py的代碼:
- parse() 方法是scrapy創建的,這裡我們用它來解析網頁的第一層鏈接,抽取的是分類頁面的鏈接
- yield scrapy.Request() 把當前鏈接進隊列
- dont_filter 參數設置為True,即不過濾鏈接
- callback 調用的是pages() 方法,用來處理第二層鏈接
- meta 參數為向下層傳遞當前的鏈接,以字典的形式,不需要就不用傳,我這是給下層做URL拼接用的
- pages() 方法是自行創建的,用來獲取第二層鏈接的頁數
- 取得當前分類的頁數,在進隊列之前需要構造好URL再傳遞下去
- callback 調用的是parse_response() 方法,用來處理第三層鏈接
- parse_response() 方法是提取第三層鏈接中的小說名稱和對應鏈接
- 到這裡就需要創建 items 對象了,因為這是我們需要的數據,把拿到的數據對應序列化成字典在返回給 items
- 到這裡解析的整個流程就走完了,接著scrapy會循環往復的把鏈接進隊列,把隊列鏈接做處理直到每個分類下的每一頁中的select爬取完畢便自行結束
接收 itmes,這需要配置在和spiders同級目錄中的items.py中定義好字段,這是我們需要接收的數據,如下:
PS:由於爬去深度已經是到第三級了,內容也比較多就不提取小說的章節和內容了
配置文件可以不修改,但若有爬取延時、定義頭部信息、是否遵循robot協議等需求可以自行配置:
- 保存結果到json格式文件,命令:scrapy crawl demo -o fp.json -t json
- 在 settings.py 中加一個參數更改一下輸出的編碼
運行效果如下:
作者也在學習當中,難免會有錯漏的地方,懇請讀者能給予意見或建議,謝謝!轉載請註明:[learnaLanguage_Yi_Zhou_Python:Scrapy爬取小說]
閱讀更多 learnaLanguage 的文章