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

Scrapy如何从不同相对URL中提取PDF和10K表单的正确绝对URL

解决方法

核心实现逻辑

你拿到的/Click/xxx格式路径是中间跳转路径,Scrapy自带的重定向中间件默认开启,会自动跟进3xx跳转请求,无需手动解析跳转规则,具体实现步骤如下:

  1. 先将提取到的相对URL拼接为完整的跳转页绝对URL,使用Scrapy内置的response.urljoin()方法即可自动适配当前域名完成拼接
  2. 直接对拼接后的跳转URL发起请求,Scrapy会自动跟进重定向到最终的PDF/HTML真实地址

代码示例

from scrapy import Request

# 你原有提取相对链接的逻辑
most_recent = response.css("div.view_btn > a::attr(href)").getall()

for relative_url in most_recent:
    # 拼接为跳转页的完整绝对URL
    jump_absolute_url = response.urljoin(relative_url)
    # 直接发起请求,Scrapy自动处理重定向
    yield Request(jump_absolute_url, callback=self.save_pdf)

在下载回调函数中,你可以直接通过response.url拿到最终的真实文件地址,示例:

def save_pdf(self, response):
    # 此处response.url即为你需要的真实PDF/HTML绝对地址
    real_file_url = response.url
    # 保存文件逻辑
    file_name = real_file_url.split("/")[-1]
    with open(file_name, "wb") as f:
        f.write(response.body)

特殊场景适配

如果跳转是通过页面内<meta>标签实现的非3xx跳转,在项目settings.py中添加以下配置即可让Scrapy自动处理这类跳转:

# settings.py
# 开启重定向处理
REDIRECT_ENABLED = True
# 开启meta跳转处理
METAREFRESH_ENABLED = True
# 允许处理延迟不超过5秒的meta跳转
METAREFRESH_MAXDELAY = 5

示例页面截图

内容的提问来源于stack exchange,提问作者Marrluxia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:57:05