scrapy 解决Redirecting 301 302重定向问题
在使用Scrapy框架中URl被重定向,總是遇到這類問題:
DEBUG: Redirecting (301/302) to <GET https://XXXX refer https://XXXX>
解決方式:
-
在Scrapy中的Request中添加 dont_filter=True,因為Scrapy是默認過濾掉重復的請求URL,添加上參數之后即使被重定向了也能請求到正常的數據了。
-
在Scrapy框架中的 settings.py文件里添加
HTTPERROR_ALLOWED_CODES設置來指定spider能處理的response返回值
也就是說 忽略 該列表中 不具有的狀態碼(當然正常的200狀態碼除外)的response。
另外:
在爬蟲多次請求時,有些網站會出現反爬蟲措施:將請求鏈接重定向到一個提示404的鏈接或者驗證碼鏈接等阻止爬蟲的進行,如下為解決方案:
def start_requests(self):for i in self.start_urls:yield Request(i, meta={'dont_redirect': True,'handle_httpstatus_list': [301,302]}, callback=self.parse)# 'dont_redirect': True是禁止重定向 # Request.meta 中的 handle_httpstatus_list 鍵可以用來指定每個request所允許的response code。提示:
根據 HTTP標準 ,返回值為200-300之間的值為成功的resonse。
如果想處理在這個范圍之外的response,可以通過 spider的 handle_httpstatus_list 屬性或HTTPERROR_ALLOWED_CODES 設置來指定spider能處理的response返回值。
例如,如果想要處理返回值為404的response可以這么做:
class MySpider(CrawlSpider):handle_httpstatus_list = [404]使用requests模塊遇到301和302問題時
html = requests.get(url, headers=headers, allow_redirects=False) return html.headers['Location']allow_redirects=False的意義為拒絕默認的301/302重定向,從而可以通過html.headers[‘Location’]拿到重定向的URL
總結
以上是生活随笔為你收集整理的scrapy 解决Redirecting 301 302重定向问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 撤销文件的修改(checkout
- 下一篇: python操作redis用法详解