scrapy設置請求池

  • 2019 年 12 月 31 日
  • 筆記

文章目錄

  1. 1. scrapy設置」請求池」
    1. 1.1. 引言
    2. 1.2. 爬蟲請求常見的錯誤
    3. 1.3. 話不多說直接擼程式碼
    4. 1.4. 說明
    5. 1.5. 注意
    6. 1.6. 作者說

scrapy設置」請求池」

引言

相信大家有時候爬蟲發出請求的時候會被ban,返回的是403錯誤,這個就是請求頭的問題,其實在python發出請求時,使用的是默認的自己的請求頭,網站管理者肯定會不允許機器訪問的,但是有些比較low的網站還是可以訪問的,有時候網站管理者看到同一個請求頭在一秒內請求多次,傻子都知道這是機器在訪問,因此會被ban掉,這時就需要設置請求池了,這個和ip代理池是一個概念 爬蟲請求常見的錯誤 200:請求成功 處理方式:獲得響應的內容,進行處理 201:請求完成,結果是創建了新資源。新創建資源的 URI 可在響應的實體中得到 處理方式:爬蟲中不會遇到 202:請求被接受,但處理尚未完成 處理方式:阻塞等待 204:伺服器端已經實現了請求,但是沒有返回新的信 息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。 處理方式:丟棄 300:該狀態碼不被 HTTP/1.0 的應用程式直接使用, 只是作為 3XX 類型回應的默認解釋。存在多個可用的被請求資源。 處理方式:若程式中能夠處理,則進行進一步處理,如果程式中不能處理,則丟棄 301:請求到的資源都會分配一個永久的 URL,這樣就可以在將來通過該 URL 來訪問此資源 處理方式:重定向到分配的 URL 302:請求到的資源在一個不同的 URL 處臨時保存 處理方式:重定向到臨時的 URL 304 請求的資源未更新 處理方式:丟棄 400 非法請求 處理方式:丟棄 401 未授權 處理方式:丟棄 403 禁止 處理方式:丟棄 404 沒有找到 處理方式:丟棄 5XX 回應程式碼以「5」開頭的狀態碼錶示伺服器端發現自己出現錯誤,不能繼續執行請求 處理方式:丟棄

話不多說直接擼程式碼

from scrapy import log  import random  from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware  class RotateUserAgentMiddleware(UserAgentMiddleware):  # for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php  user_agent_list = [      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "      "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",      "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "      "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "      "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",      "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "      "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",      "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "      "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",      "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "      "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",      "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "      "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",      "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",      "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",      "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",      "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",      "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",      "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",      "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "      "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",      "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "      "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",      "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "      "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"  ]  def process_request(self, request, spider):      ua = random.choice(self.user_agent_list)      if ua:          # 顯示當前使用的useragent          print "********Current UserAgent:%s************" % ua          # 記錄          log.msg('Current UserAgent: ' + ua)          request.headers.setdefault('User-Agent', ua)  說明

說明

這裡的思路就是在下載器中間件中對request設置請求,這裡是使用request.headers.setdefault("User-Agent",user_agent)這個函數設置請求頭,對於下載器中間件在我部落格前面的文章已經有說明,想要了解的請點擊

注意

這裡還要說明的是設置了請求池還要在配置文件settins中設置一下,具體設置方法和設置代理ip一樣,詳情請看scrapy代理ip的設置 作者說 本人秉著方便他人的想法才開始寫技術文章的,因為對於自學的人來說想要找到系統的學習教程很困難,這一點我深有體會,我也是在不斷的摸索中才小有所成,如果你們覺得我寫的不錯就幫我推廣一下,讓更多的人看到。另外如果有什麼錯誤的地方也要及時聯繫我,方便我改進,謝謝大家對我的支援

版權資訊所有者:chenjiabing 如若轉載請標明出處:chenjiabing666.github.io6