Web scraping Scrapy handle 301/302响应代码以及跟踪目标url
我正在使用scrapy版本1.0.5来实现一个爬虫程序。目前,我已经设置了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和回调参数的请求对象 但我似乎记得,你可以按照以下思路来做
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列表中
,则处理重定向自动跟踪的中间件将无效。以及接收“原始”响应的回调,需要为其解释标头和/或正文。