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
相关产品推荐
相关产品推荐

