scrapy 重定向解决
在Scrapy中处理重定向,可以使用handle_httpstatus_list和dont_redirect两个Scrapy的settings配置来解决。
-
使用
handle_httpstatus_list配置来处理特定的HTTP状态码,包括重定向状态码。在Scrapy的settings.py文件中添加以下配置:handle_httpstatus_list = [301, 302]这样Scrapy会将这些状态码作为正常的响应处理,而不会被当作错误处理。
-
使用
dont_redirect配置来控制是否自动重定向。在Scrapy的settings.py文件中添加以下配置:REDIRECT_ENABLED = False这样Scrapy在遇到重定向时,不会自动进行重定向,而是将重定向的URL作为正常的响应返回。
另外,如果需要自定义处理重定向逻辑,可以通过重写start_requests方法来实现。在Spider中重写start_requests方法,可以自定义处理重定向的逻辑。
以下是一个处理重定向的示例代码:
import scrapy
class MySpider(scrapy.Spider):
name = 'my_spider'
def start_requests(self):
urls = ['http://www.example.com']
for url in urls:
yield scrapy.Request(url, callback=self.parse, dont_filter=True)
def parse(self, response):
if response.status == 301 or response.status == 302:
# 处理重定向
redirect_url = response.headers.get('Location')
yield scrapy.Request(redirect_url, callback=self.parse, dont_filter=True)
else:
# 处理正常响应
# ...
在上面的代码中,如果遇到301或302状态码,会获取重定向的URL,并发送新的请求进行处理。如果是其他状态码,就会处理正常的响应
原文地址: https://www.cveoy.top/t/topic/ikVE 著作权归作者所有。请勿转载和采集!