如何在301重定向上回调而不在scrapy中爬行?

如何在301重定向上回调而不在scrapy中爬行?,scrapy,Scrapy,我正在抓取一个搜索结果页面,在某些情况下会触发301重定向。在这种情况下,我不想抓取该页面,但我需要调用另一个回调函数,将重定向URL字符串传递给它 我相信按照规则应该是可行的,但我不知道如何: class GetbidSpider(CrawlSpider): handle_httpstatus_list = [301] rules = ( Rule( LinkExtractor(

我正在抓取一个搜索结果页面,在某些情况下会触发301重定向。在这种情况下,我不想抓取该页面,但我需要调用另一个回调函数,将重定向URL字符串传递给它

我相信按照规则应该是可行的,但我不知道如何:

class GetbidSpider(CrawlSpider):
    handle_httpstatus_list = [301]
    rules = (
            Rule(
                LinkExtractor(              
                    allow=['^https://www\.testrule*$'],                               
                ), 
                follow=False,
                callback= 'parse_item'
            ),
    )

    def parse_item(self, response):
        self.logger.info('Parsing %s', response.url)
        print(response.status)
        print(response.headers[b'Location'])
日志文件仅显示:

DEBUG: Crawled (301) <GET https:...

DEBUG:Crawled(301)我真的不明白为什么我的建议不适合你。这是一个经过测试的代码:

import scrapy

class RedirectSpider(scrapy.Spider):

    name = 'redirect_spider'
    
    def start_requests(self):
        yield scrapy.Request(
            url='https://www.moneycontrol.com/india/stockpricequote/pesticidesagrochemicals/piindustries/PII',
            meta={'handle_httpstatus_list': [301]},
            callback=self.parse,
        )

    def parse(self, response):
        print(response.status)
        print(response.headers[b'Location'])
        pass

这回答了你的问题吗?我相信这是不同的。我正在删除start_URL中定义的给定搜索列表,规则中有一个正则表达式,以防止任何其他URL被删除和跟踪。现在,这种情况下的响应是301,日志告诉我“已爬网”。我不想让它爬行,但我需要解析已经包含我需要知道的信息的响应URL字符串。到目前为止,我还没有找到一个有助于解决这个问题的答案@默认情况下,Scrapy将遵循重定向。如果您不需要这种行为,您需要使用上述设置并在代码中手动处理响应(提取重定向URL等)。后一个问题正是我面临的问题。如何处理响应?我在哪里可以调用回调方法并传递响应url来处理它?酷!这很有效。然而,这给我带来了一个新问题。我有一个要刮取的URL数组:start_url=[]已传递给规则集。现在,我删除了规则集以配合您的示例。如何遍历开始url?
查找self中的url。开始url: