關注Python學習交流
學習更多Python知識
起步
首先我們使用Scrapy的指令行建立一個新的項目
'''
想要學習Python?Python學習交流群:984632579滿足你的需求,資料都已經上傳群檔案,可以自行下載下傳!
'''
scrapy startproject douban
運作後,我們就有了下面這樣的目錄結構
Scrapy為我們生成了已經組織好的目錄結構,上面的注釋部分解釋了每個檔案及目錄的作用。
建立目标
本篇我們來建立兩個目标,這兩個目标都是基于豆瓣網:
- 目标一:抓取豆瓣TOP250的圖書資訊并儲存成csv檔案
- 目标二:抓取我的第一頁豆郵标題(需要登入),并儲存成csv檔案
分析目标一
目标一是豆瓣的TOP250圖書資訊,首先我們進入到TOP250的清單(https://book.douban.com/top250) ,我用圖示圈出我們這次要爬取的内容,具體請看圖示:
從圖上的框線中我們主要圈出了書名、價格、出版年份、出版社、評分,其中出版年份,出版社以及價格是在一行中,這個我們需要進一步處理。
分頁的處理:總記錄是250條,每頁是25條圖書資訊,共分了10頁。
實作目标一
需要用到的概念:
- Item
- Item Pipeline
首先建立Scrapy的Item, Scrapy的Item就是我們需要存儲的資料結構,先修改items, 然後在spiders目錄中建立一個名為bookspider.py的Python檔案,由于我們需要在一堆字元串中提取出出版社和價格等資訊是以我們這裡需要對抓取的内容進一步處理, 在這之前還需要修改settings.py檔案:
- 加入faker的模拟USER_AGENT資料防止被豆瓣屏蔽,
- 也可以設定DEFAULT_REQUEST_HEADERS參數。
- 修改ITEM_PIPELINES
代碼如下所示:
items.py
bookspider.py
pipelines.py
最後我們到douban的根目錄中執行以下指令來運作爬蟲來執行并導出資料到csv檔案
csv檔案截圖如下:
分析目标二
目标二是建立在了解了目标一的基礎上進行的,因為豆瓣登入次數過多會有驗證碼出現,這裡提供一種手工填寫驗證碼的方式,暫時不讨論如何去識别驗證碼,目标二的核心概念是如何送出POST表單和登入成功後帶Cookie的請求。首先我們可以看到頁面結構如下圖所示:
實作目标二
定義Item
定義doumailspider
這裡需要注意的有三個地方:
-
第一個是meta中的cookiejar
Scrapy 通過使用 cookiejar Request meta key來支援單spider追蹤多cookie session。預設情況下其使用一個cookie jar(session),不過您可以傳遞一個标示符來使用多個。
- start_requests 我們這裡重寫了爬蟲爬取得第一個頁面,這裡一開始就進去到登入頁面
- 當執行爬蟲的時候,我們需要把列印出來的驗證碼位址粘貼到浏覽器中,手動輸入到控制上完成驗證。
同目标一一樣需要設定settings中的相關參數,唯一不同的是ITEM_PIPELINES。
最後我們使用以下指令來啟動爬蟲
csv檔案截圖如下:
總結
本篇我們學習了如果定義Item以及如何對Item進行進一步處理(Item Pipeline), 還通過登入豆瓣的案例來了解了如果使用Scrapy進行表單送出和Cookie追蹤,也了解了對于有驗證碼的情況該如何處理,當然我們這裡暫時還不讨論如何識别驗證碼。關于Scrapy的更進階的一些用法和特性可以進一步閱讀Scrapy官網的文檔。
特别申明:本文所提到的豆瓣網隻是拿來進行爬蟲的技術交流學習,讀者涉及到的所有侵權問題都與本人無關,也希望大家在學習實戰的過程中不要大量的爬取内容對伺服器造成負擔