Scrapy如何从不同相对URL中提取PDF和10K表单的正确绝对URL
解决方法
核心实现逻辑
你拿到的/Click/xxx格式路径是中间跳转路径,Scrapy自带的重定向中间件默认开启,会自动跟进3xx跳转请求,无需手动解析跳转规则,具体实现步骤如下:
- 先将提取到的相对URL拼接为完整的跳转页绝对URL,使用Scrapy内置的
response.urljoin()方法即可自动适配当前域名完成拼接 - 直接对拼接后的跳转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
相关产品推荐
相关产品推荐

