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

BeautifulSoup爬取表格无法识别全部<tr>且日期提取异常如何解决

问题原因

  • 无法识别全部<tr>元素:目标页面的表格数据未直接内嵌在静态HTML源码中,是页面加载完成后由JavaScript异步请求后端接口数据,再动态渲染到DOM结构里的。直接使用requests/urllib拉取的是未执行JS的原始静态代码,仅包含表格框架结构,无实际数据对应的<tr>节点,因此只能抓取到极少量<tr>。
  • 日期字段输出为on {{data}}:抓取到的内容是前端框架的模板占位符,原始HTML中日期位置默认写入的是{{data}}这类插值标记,需要等JS执行完成后才会被替换为真实日期值,静态爬取只能拿到未替换的占位符内容。

解决方案

方案1:直接请求后端数据接口(推荐,执行效率最高)

页面数据以JSON格式存储在公开可访问的后端接口中,无需复杂鉴权参数,直接请求接口拿到JSON数据后可直接转换为结构化表格,无需解析HTML。
参考代码:

import requests
import pandas as pd

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' }
# 请求后端数据接口
resp = requests.get("https://cms.mediahack.co.za/api/v1/articles/bhekisisa-vaccination-table?version=1721290137933", headers=headers).json()

# 提取表格数据
table_data = resp['data']['content_components'][0]['items']
# 提取更新日期
update_date = resp['data']['updated_at']
# 转换为DataFrame
df = pd.DataFrame(table_data)
print(df.head())
print("数据更新日期:", update_date)

方案2:使用支持JS渲染的爬虫工具

如果需要解析渲染后的完整HTML结构,可以使用Selenium、Playwright等无头浏览器工具,等待页面JS执行完成后再提取DOM元素,即可拿到完整的<tr>节点和真实日期值。
参考代码(以Selenium为例):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd

chrome_options = Options()
# 启用无头模式,不弹出浏览器窗口
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://hosted.mediahack.co.za/bhekisisa-vaccination-table/")
# 等待页面渲染完成,可替换为显式等待提升稳定性
driver.implicitly_wait(5)

# 获取渲染完成的完整HTML
page_html = driver.page_source
driver.quit()

page_soup = BeautifulSoup(page_html, "html.parser")
# 正常提取表格、日期等内容
table = page_soup.find("table")
tr_list = table.find_all("tr")
print("tr元素总数:", len(tr_list))
date = page_soup.find("div", {"class":"header-subhead"}).text
print("日期内容:", date)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 10:00:04