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

使用Beautiful Soup/Requests下载HTML中不完整URL对应的PDF文件

问题解决方法

报错根因为你提取到的href属性是站点相对路径,未携带协议和域名信息,requests无法基于这类路径直接发起请求,需要你将前缀拼接在请求的URL参数位置。

方案1:直接字符串拼接(适配当前场景)

你可以直接把域名前缀和link.get('href')的结果做字符串拼接,替换原requests.get的入参即可,修改后代码如下:

for link in links:
    if ('/pdf' in link.get('href', [])):
        i += 1
        print("Downloading file: ", i)
        # 仅修改这一行,拼接完整URL
        response = requests.get("https://mdpi.com" + link.get('href'))

当前场景下你拿到的href都是/开头的路径,和不带末尾斜杠的前缀拼接后正好是完整有效URL。

方案2:使用urljoin(通用兼容方案)

如果要适配更多路径格式的场景,避免斜杠重复/缺失的问题,可以用Python标准库的urljoin工具自动拼接路径:

  1. 首先在代码开头导入工具:
from urllib.parse import urljoin
  1. 修改请求行代码:
response = requests.get(urljoin("https://mdpi.com", link.get('href')))

额外注意事项

  • 建议给requests.get添加headers参数,设置正常的User-Agent模拟浏览器请求,避免被站点的反爬策略拦截
  • 批量下载时建议在每次请求后加1~2秒的延时,降低请求频率,避免给站点造成过大压力,也能减少被封IP的概率

内容的提问来源于stack exchange,提问作者Brian C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:24:00