爬蟲---scrapy全站爬取


全站爬取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)
  • 手動發送請求 (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
    • 編寫爬蟲程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM