1. 程式人生 > 實用技巧 >11 提升爬蟲效率和反扒

11 提升爬蟲效率和反扒

提升scrapy爬取資料的效率

增加併發:

預設scrapy開啟的併發執行緒為32個,可以適當進行增加。在settings配置檔案中修改CONCURRENT_REQUESTS = 100值為100,併發設定成了為100。

降低日誌級別:

在執行scrapy時,會有大量日誌資訊的輸出,為了減少CPU的使用率。可以設定log輸出資訊為INFO或者ERROR即可。在配置檔案中編寫:LOG_LEVEL = ‘INFO’

禁止cookie:

如果不是真的需要cookie,則在scrapy爬取資料時可以禁止cookie從而減少CPU的使用率,提升爬取效率。在配置檔案中編寫:COOKIES_ENABLED = False

禁止重試:

對失敗的HTTP進行重新請求(重試)會減慢爬取速度,因此可以禁止重試。在配置檔案中編寫:RETRY_ENABLED = False

減少下載超時:

如果對一個非常慢的連結進行爬取,減少下載超時可以能讓卡住的連結快速被放棄,從而提升效率。在配置檔案中進行編寫:DOWNLOAD_TIMEOUT = 10 超時時間為10s

爬蟲的反扒措施

  • header 瀏覽器的請求頭 (全國動產抵押監督管理平臺)
  • User-Agent 使用者代理,表明訪問源身份的一種方式 (全國動產抵押監督管理平臺)
  • Referer 訪問的目標連結是從哪個連結跳轉過來的(做防盜鏈的話,就可以從它入手)HTTP來源地址(referer,或 HTTP referer)是HTTP表頭的一個欄位,用來表示從哪兒連結到目前的網頁,採用的格式是URL。換句話說,藉著HTTP來源地址,目前的網頁可以檢查訪客從哪裡而來,這也常被用來對付偽造的跨網站請求。 (中國裁判文書網)
  • Host 同源地址判斷,用它會很有用 (IT桔子)
  • IP 同一個IP短時多次訪問,就很有可能是爬蟲,反爬蟲會對此做處理 (搜狗微信)
  • 訪問頻率 短時多次高併發的訪問,基本上就是有問題的訪問 (搜狗微信)
  • Cookie 儲存在瀏覽器端,常用來儲存“認證資料”,請求會攜帶這些資料傳送給伺服器,這樣伺服器才能判斷當前請求的狀態 (北京市企業信用資訊網)
  • 動態請求載入 通過Ajax非同步載入的網頁內容在網頁原始碼中是沒有的,網頁返回的response中是解析不到我們想要的內容的 (大眾點評)
  • 網站資料加密 抓取下來的資料是經過加密的,給爬蟲資料處理帶來問題 (去哪兒)
  • 混淆js加密 首次請求資料時,服務端返回動態的混淆加密過的JS,而這段JS的作用是給Cookie新增新的內容用於服務端驗證,此時返回的狀態碼一般不是200。瀏覽器帶上新的Cookie再次請求,服務端驗證Cookie通過返回資料(這也是為嘛程式碼不能返回資料的原因) (中國裁判文書網)
  • 驗證碼 使用者請求頻率過高的時候,有些網站就會觸發驗證碼驗證機制,讓你輸入各種驗證碼 (12306)
  • 登入 需要使用者登入之後才能夠獲取頁面中的資訊,那麼這種防護能非常有效的防止資料大批量的被爬取 (IT桔子)
  • 限制網頁返回資料條數 網頁剛開始會顯示很多條,當你賬號或者一段時間後網頁返回資料,你只能侷限於前幾頁或者前幾條 (IT桔子)
  • Noscript標籤的使用
1 user-agent
2 referer
3 cookie(cookie池,先訪問一次)
4 頻率限制(代理池,延遲)
5 js加密(扣出來,exjs模組指向)
6 css加密
7 驗證碼(打碼平臺),半手動
8 圖片懶載入