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

Python Web scraping求助:无法访问表格tbody中的tr标签怎么办?

网页抓取表格内容失败的问题排查与解决

可能的问题原因

  • 动态内容渲染:目标网页的表格数据是通过JavaScript动态加载的,用requests直接获取的是未执行JS的原始HTML,自然看不到tbody里的tr标签。
  • HTML结构差异:部分浏览器会自动为表格补全tbody标签,但服务器返回的原始HTML中可能根本没有tbody,数据直接在table下的tr节点里。
  • 反爬限制:网站可能验证了请求头(比如User-Agent),或者需要携带特定Cookie,导致请求到的内容不完整。

对应解决办法

1. 处理动态渲染内容

如果是JS动态加载数据,改用支持执行JS的工具(如selenium):

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd

driver = webdriver.Chrome()
driver.get("https://www.sixnationsrugby.com/report/conway-at-the-double-as-ireland-defeat-wales-in-dublin#match-stats")
# 等待表格加载完成
driver.implicitly_wait(10)
# 定位表格并提取数据
table = driver.find_element(By.CSS_SELECTOR, "#match-stats table")
df = pd.read_html(table.get_attribute('outerHTML'))[0]
print(df)
driver.quit()

2. 检查原始HTML结构

用requests获取页面后,直接查找table下的tr标签,跳过tbody:

import requests
from bs4 import BeautifulSoup

url = "https://www.sixnationsrugby.com/report/conway-at-the-double-as-ireland-defeat-wales-in-dublin#match-stats"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 直接定位table下的所有tr
rows = soup.select("#match-stats table tr")
for row in rows:
    print([td.text.strip() for td in row.find_all('td')])

3. 完善请求头

模拟浏览器请求头,避免被反爬拦截:

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9"
}
response = requests.get(url, headers=headers)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:45:10