scrapy設置請求池
- 2019 年 12 月 31 日
- 筆記
文章目錄
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
