全站爬取1
基於管道的持久化存儲
-
數據解析(爬蟲類)
-
將解析的數據封裝到item類型的對象中(爬蟲類)
-
將item提交給管道, yield item(爬蟲類)
-
在管道類的process_item中接手收item對象, 並進行任意形式的持久化存儲操作(管道類)
-
在配置文件中開啟管道
-
細節:
-
將爬取到的數據進行備份:一個管道類對應一種平台的持久化存儲
-
有多個管道類是否意味着多個管道類都可以接收到爬蟲文件提交的item?
只有優先級最高的管道才會接收到item,其余的管道是從優先級最高的管道類中接收item
-
基於Spider父類進行全站數據的爬取
- 全站數據的爬取:將所有頁碼對應的頁面數據進行爬取
- 手動發送請求 (get):
yield scrapy.Request(url, callback)
- 對yield的總結:
- 向管道提交item時,
yield item
- 手動發送請求:
yield scrapy.Request(url, callback)
- 向管道提交item時,
- 手動發送請求 (post):
yield scrapy.Request(url, formdata, callback)
scrapy請求傳參
-
作用: 實現深度爬取
-
使用場景: 使用scrapy爬取的數據沒有存在於同一個頁面中,
-
傳遞item:
yield Request(url, callback, meta={'item':item})
-
接收item:
response.meta['item']
提升scrapy爬取數據的效率
在配置文件中進行相關配置即可.
- 增加並發: 默認scrapy開啟的並發線程為32個, 可以適當進行增加. 在settings配置文件中修改CONCURRENT_REQUESTS=100
- 降低日志級別: 在運行scrapy時, 會有大量日志信息的輸出, 為了減少CPU的使用率, 可以設置log輸出信息為INFO或ERROR即可, 在配置文件中寫入 LOG_LEVEL='INFO'
- 禁止cookie: 如果不是真的需要cookie, 則在scrapy爬取數據時可以禁止cookie, 從而減少CPU的使用率, 提升爬取效率. 在配置文件中設置COOKIES_ENABLED=False
- 禁止重試: 對失敗的HTTP進行重新請求會減慢爬取速度, 因此可以禁止重試. 在配置文件中設置RETRY_ENABLED=False
- 減少下載超時: 如果對一個非常慢的鏈接進行爬取, 減少下載超時可以能讓卡住的鏈接被快速放棄, 提升效率. 在配置文件中設置DOWNLOAD_TIMEOUT=10, 設置超時時間為10秒.
scrapy的中間件
-
爬蟲中間件
-
下載中間件(重點): 處於引擎和下載器之間
- 作用: 批量攔截所有的請求和響應
- 攔截請求, 可以篡改請求的頭信息, 進行UA偽裝; 或者篡改請求對應的IP代理
- 攔截響應, 可以篡改響應數據, 或者篡改響應對象
-
selenium在scrapy中的使用流程
- 在爬蟲類中定義一個browser屬性, 其實就是實例化的瀏覽器對象
- 在爬蟲類重寫父類的closed(self, spider)方法, 並在該方法中關閉browser
- 在中間件中進行瀏覽器自動化操作
圖片懶加載
- 應用到標簽的偽屬性, 數據捕獲的時候要基於偽屬性進行.
- 專門用於二進制數據下載和持久化存儲的管道類: ImagePipeline
全站爬取2
CrawlSpider
- 一種基於scrapy進行全站數據爬取的一種新的技術手段
- CrawlSpider是Spider的一個子類
- 連接提取器: LinkExtractor
- 規則解析器: Rule
- 使用流程:
- 新建工程
- cd 工程中, 新建一個爬蟲文件
scrapy genspider -t crawl spider_name www.xxx.com
- 編寫爬蟲程序