Scrapy中如何获取初始URL?解决重定向后二者值一致问题
解决Scrapy重定向后获取初始URL的问题
问题根源在于Scrapy会自动跟进重定向,重定向后的请求URL会被更新为最终跳转后的地址,导致response.request.url和response.url结果一致。要保留初始的start_url,需要在请求发起时把初始URL存入请求的meta字典中,具体实现如下:
- 重写
start_requests方法,手动生成初始请求并将初始URL存入meta - 在
parse方法中,从response.meta里提取初始URL
修改后的代码:
class SpiderTst(scrapy.Spider): name = 'spider_tst' start_urls = ['vrgroup.fi'] def start_requests(self): for url in self.start_urls: # 将初始URL存入meta的initial_url字段 yield scrapy.Request(url, meta={'initial_url': url}) def parse(self, response): tst_item = TstItem() tst_item['url'] = response.url # 最终跳转后的目标URL # 从meta中取出原始的初始URL tst_item['initial_url'] = response.meta.get('initial_url') yield tst_item
这样处理后,即使发生多次重定向,initial_url始终是你在start_urls中定义的原始地址,url则是最终响应的页面地址。
如果后续需要在其他请求(比如从当前页面提取的新链接)中关联这个初始URL,只需在生成新请求时传递meta即可:
yield scrapy.Request(new_url, meta={'initial_url': response.meta.get('initial_url')}, callback=self.parse_other)
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

