Python:Scrapy爬取小說

Scrapy是一個使用Python語言(基於Twisted框架)編寫的開源網絡爬蟲框架,它簡單易用、靈活易拓展、開發社區活躍,並且是跨平臺的。在Linux、 MaxOS以及Windows平臺都可以使用。
Python:Scrapy爬取小說

在任意操作系統下,可以使用pip安裝Scrapy,例如:

Python:Scrapy爬取小說

然後,在shell中測試能否執行Scrapy這條命令:

Python:Scrapy爬取小說

創建一個Scrapy爬蟲:

Python:Scrapy爬取小說

創建好一個名為example的項目後,查看項目目錄下的文件,顯示如下:

Python:Scrapy爬取小說

實現爬蟲的Python文件應位於exmaple/spiders目錄下,在該目錄下創建新文件Demo.py:

Python:Scrapy爬取小說

下面是spiders中Demo.py的代碼:

Python:Scrapy爬取小說


  • parse() 方法是scrapy創建的,這裡我們用它來解析網頁的第一層鏈接,抽取的是分類頁面的鏈接
  • yield scrapy.Request() 把當前鏈接進隊列
  • dont_filter 參數設置為True,即不過濾鏈接
  • callback 調用的是pages() 方法,用來處理第二層鏈接
  • meta 參數為向下層傳遞當前的鏈接,以字典的形式,不需要就不用傳,我這是給下層做URL拼接用的
Python:Scrapy爬取小說


  • pages() 方法是自行創建的,用來獲取第二層鏈接的頁數
  • 取得當前分類的頁數,在進隊列之前需要構造好URL再傳遞下去
  • callback 調用的是parse_response() 方法,用來處理第三層鏈接
Python:Scrapy爬取小說


  • parse_response() 方法是提取第三層鏈接中的小說名稱和對應鏈接
  • 到這裡就需要創建 items 對象了,因為這是我們需要的數據,把拿到的數據對應序列化成字典在返回給 items
  • 到這裡解析的整個流程就走完了,接著scrapy會循環往復的把鏈接進隊列,把隊列鏈接做處理直到每個分類下的每一頁中的select爬取完畢便自行結束
Python:Scrapy爬取小說


Python:Scrapy爬取小說


接收 itmes,這需要配置在和spiders同級目錄中的items.py中定義好字段,這是我們需要接收的數據,如下:

Python:Scrapy爬取小說

PS:由於爬去深度已經是到第三級了,內容也比較多就不提取小說的章節和內容了

配置文件可以不修改,但若有爬取延時、定義頭部信息、是否遵循robot協議等需求可以自行配置:

  • 保存結果到json格式文件,命令:scrapy crawl demo -o fp.json -t json
  • 在 settings.py 中加一個參數更改一下輸出的編碼
Python:Scrapy爬取小說

運行效果如下:

Python:Scrapy爬取小說

作者也在學習當中,難免會有錯漏的地方,懇請讀者能給予意見或建議,謝謝!轉載請註明:[learnaLanguage_Yi_Zhou_Python:Scrapy爬取小說]


分享到:


相關文章: