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

如何用BeautifulSoup获取网页HTML的tbody内容?动态页面爬取求助

解决动态页面表格数据爬取问题

你遇到的是典型的动态渲染页面爬取限制:页面的表格内容并非服务器直接返回的初始HTML,而是通过浏览器执行JavaScript异步加载生成的。所以用BeautifulSoup直接请求URL,只能拿到空表格的框架(仅th标签),看不到动态生成的tr数据。

下面给你两种可行的解决方法:

方法一:直接抓取数据接口(推荐)

动态页面的表格数据通常来自后端API接口,直接请求接口获取JSON数据比解析HTML更高效:

  1. 打开浏览器F12开发者工具,切换到「Network」标签,刷新目标页面。
  2. 在「XHR」或「Fetch」分类下,查找返回排名数据的接口(通常URL包含rank、data等关键词,响应内容为JSON格式)。
  3. 用requests库直接请求该接口,解析JSON即可拿到完整数据。示例代码:
import requests

# 替换为你找到的真实接口URL
api_url = "xxx"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get(api_url, headers=headers)
data = response.json()

# 处理数据,比如提取排名列表
for item in data["data"]:
    print(item["team_name"], item["win_rate"])

方法二:使用无头浏览器渲染页面

如果找不到接口,或接口有复杂签名验证,可以用无头浏览器模拟真实浏览器加载页面,再解析渲染后的HTML:

  1. 安装依赖库和浏览器驱动,比如用Selenium:
pip install selenium

同时下载与Chrome浏览器版本匹配的ChromeDriver,放到环境变量路径下。
2. 示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

# 配置无头模式
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")

# 启动浏览器,加载页面
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://lpl.qq.com/esnew/data/rank.shtml?iGameId=190&sGameType=1,5")
# 等待页面加载完成(可根据实际情况调整等待时间)
driver.implicitly_wait(10)

# 获取渲染后的HTML,用BeautifulSoup解析
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

# 提取表格数据
table = soup.find("table")
rows = table.find_all("tr")
for row in rows[1:]:  # 跳过表头
    cols = row.find_all("td")
    print([col.text.strip() for col in cols])

# 关闭浏览器
driver.quit()

总结:不需要完全放弃BeautifulSoup,但要结合动态内容的加载方式选择合适的爬取方案——优先抓接口,其次用无头浏览器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:17