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