You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy中如何获取初始URL?解决重定向后二者值一致问题

解决Scrapy重定向后获取初始URL的问题

问题根源在于Scrapy会自动跟进重定向,重定向后的请求URL会被更新为最终跳转后的地址,导致response.request.url和response.url结果一致。要保留初始的start_url,需要在请求发起时把初始URL存入请求的meta字典中,具体实现如下:

  1. 重写start_requests方法,手动生成初始请求并将初始URL存入meta
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:13:26