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

网页抓取时tbody标签缺失无法获取PDF下载链接如何解决

问题原因

直接用requests获取不到tbody节点,是因为目标站点的表格tbody内容属于动态渲染数据:初始返回的静态HTML里只有thead结构,tbody里的所有行数据是页面加载完成后,由前端JavaScript发起异步请求拉取,再动态插入到DOM里的。requests不具备执行JS的能力,自然拿不到这部分动态生成的内容。

解决方案

不用模拟浏览器渲染,直接抓取前端调用的后端数据接口效率更高,稳定性也更好:

  • 打开目标页面按F12唤起开发者工具,切换到网络面板,筛选XHR类型请求
  • 刷新页面后就能找到给表格供数的接口,接口返回结构化的JSON数据,里面包含所有表格行的内容,自然也包含PDF下载链接
  • 直接构造请求调用这个接口,解析返回数据就能拿到所有需要的PDF链接

可直接运行的参考代码如下:

from bs4 import BeautifulSoup
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest"
}
# 构造接口请求参数,length参数设为大于总数据量的值即可一次拉取全量数据
params = {
    "s": "TPU",
    "draw": 1,
    "start": 0,
    "length": 200
}
resp = requests.get(
    "https://www.nexeoplastics.com/types/plastics-product-finder",
    headers=headers,
    params=params
)
table_data = resp.json()

pdf_list = []
for row in table_data.get("data", []):
    # PDF链接位于行数据的最后一列,是HTML片段格式,直接解析提取即可
    col_soup = BeautifulSoup(row[-1], "html.parser")
    pdf_tag = col_soup.find("a", href=lambda x: x and ".pdf" in x)
    if pdf_tag:
        pdf_list.append(pdf_tag.get("href"))

# 打印所有提取到的PDF链接
for pdf_url in pdf_list:
    print(pdf_url)

如果后续接口参数有调整,直接对照浏览器开发者工具里抓到的实际请求参数,替换代码里的params字段即可,不需要解析动态渲染后的页面DOM。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:39:29