在Scrapy中处理重定向,可以使用handle_httpstatus_listdont_redirect两个Scrapy的settings配置来解决。

  1. 使用handle_httpstatus_list配置来处理特定的HTTP状态码,包括重定向状态码。在Scrapy的settings.py文件中添加以下配置:

    handle_httpstatus_list = [301, 302]
    

    这样Scrapy会将这些状态码作为正常的响应处理,而不会被当作错误处理。

  2. 使用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,并发送新的请求进行处理。如果是其他状态码,就会处理正常的响应

scrapy 重定向解决

原文地址: https://www.cveoy.top/t/topic/ikVE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录