Web scraping Scrapy handle 301/302响应代码以及跟踪目标url

Web scraping Scrapy handle 301/302响应代码以及跟踪目标url,web-scraping,scrapy,scrapy-spider,Web Scraping,Scrapy,Scrapy Spider,我正在使用scrapy版本1.0.5来实现一个爬虫程序。目前,我已经设置了REDIRECT\u ENABLED=False和handle\u httpstatus\u list=[500、301、302]来刮取包含301和302响应的页面。但是,由于REDIRECT\u ENABLED设置为False,因此爬行器不会转到位置响应标头中的目标url。如何实现这一点?这是一本很长的书,因为我做了类似的事情,但您需要生成一个带有url、meta和回调参数的请求对象 但我似乎记得,你可以按照以下思路来做

我正在使用scrapy版本1.0.5来实现一个爬虫程序。目前,我已经设置了
REDIRECT\u ENABLED=False
handle\u httpstatus\u list=[500、301、302]
来刮取包含301和302响应的页面。但是,由于
REDIRECT\u ENABLED
设置为
False
,因此爬行器不会转到
位置
响应标头中的目标url。如何实现这一点?

这是一本很长的书,因为我做了类似的事情,但您需要生成一个带有url、meta和回调参数的请求对象

但我似乎记得,你可以按照以下思路来做:

def parse(self,response):
    # do whatever you need to do .... then
    if response.status in [301, 302] and 'Location' in response.headers:
        # test to see if it is an absolute or relative URL
        newurl = urljoin(request.url, response.headers['location'])
        # or 
        newurl = response.headers['location']
        yield Request(url = newurl, meta = request.meta, callback=self.parse_whatever) 

这是一本很长的书,因为我做了类似的事情,但您需要生成一个带有url、meta和回调参数的请求对象

但我似乎记得,你可以按照以下思路来做:

def parse(self,response):
    # do whatever you need to do .... then
    if response.status in [301, 302] and 'Location' in response.headers:
        # test to see if it is an absolute or relative URL
        newurl = urljoin(request.url, response.headers['location'])
        # or 
        newurl = response.headers['location']
        yield Request(url = newurl, meta = request.meta, callback=self.parse_whatever) 

您如何处理回拨中的301和302?你能分享蜘蛛代码吗?@paultrmbrth重定向不应该被爬网吗?这取决于你所说的“爬网”是什么意思。默认情况下,Scrapy发出HTTP 30x响应请求,而不将响应传递给回调。默认情况下,Scrapy将只传递给HTTP状态为200的回调响应。如果30个代码在
handle\u httpstatus\u列表中
,则处理重定向自动跟踪的中间件将无效。而带有接收“原始”响应的回调,需要为其解释标头和/或正文。您如何处理回调中的301和302?你能分享蜘蛛代码吗?@paultrmbrth重定向不应该被爬网吗?这取决于你所说的“爬网”是什么意思。默认情况下,Scrapy发出HTTP 30x响应请求,而不将响应传递给回调。默认情况下,Scrapy将只传递给HTTP状态为200的回调响应。如果30个代码在
handle\u httpstatus\u列表中
,则处理重定向自动跟踪的中间件将无效。以及接收“原始”响应的回调,需要为其解释标头和/或正文。