如何在不爬取scrapy的情况下回调301重定向?
How to callback on 301 redirect without crawling in scrapy?
我正在抓取一个搜索结果页面,在某些情况下会触发 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:...
但是parsind信息永远不会被打印出来,说明永远不会进入函数。
我怎么能
我真的不明白为什么我的建议对你不起作用。这是经过测试的代码:
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
我正在抓取一个搜索结果页面,在某些情况下会触发 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:...
但是parsind信息永远不会被打印出来,说明永远不会进入函数。
我怎么能
我真的不明白为什么我的建议对你不起作用。这是经过测试的代码:
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