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

如何用Python抓取指定网页HTML表格数据并导出为CSV?

解决表格数据抓取仅获表头的问题

问题根源

页面表格数据是动态加载的——初始HTML里只有表头,实际数据是页面加载后通过AJAX请求从后端接口获取的。即使使用requests_html.render(),如果没有等待AJAX请求完成,或者没有正确提取渲染后的HTML,还是拿不到数据。

方案1:修正requests_html的使用方式

你的代码里用了r.content.decode('utf8')解析,但这是原始HTTP响应内容,不是浏览器渲染后的完整HTML。应该改用r.html.html获取渲染后的页面内容,同时延长等待时间确保AJAX请求完成:

import requests
from bs4 import BeautifulSoup
import csv
from requests_html import HTMLSession

url = 'https://www.fidelitypensionmanagers.com/Home/PriceHistory'
s = HTMLSession()
r = s.get(url)
# 延长等待时间,确保AJAX数据加载完成
r.html.render(sleep=5, timeout=10)

# 使用渲染后的HTML内容创建soup
soup = BeautifulSoup(r.html.html, "lxml")
table = soup.find("table",{"id":"fund-I"})

rows = table.findAll('tr')
header_text = [th.text.strip() for th in rows[0].findAll('th')]

row_text_array = []
for row in rows[1:]:
    row_text = [elem.text.replace('\n', '').strip() for elem in row.findAll(['th', 'td'])]
    row_text_array.append(row_text)

with open("out.csv", "w", newline="", encoding="utf-8") as f:
    wr = csv.writer(f)
    wr.writerow(header_text)
    wr.writerows(row_text_array)

方案2:直接抓取后端API(更高效)

通过浏览器开发者工具的「网络」标签,能查到页面加载数据的AJAX接口,直接请求这个接口比渲染页面更高效、更稳定:

import requests
import csv

# 实际获取数据的API接口
api_url = "https://www.fidelitypensionmanagers.com/Home/GetPriceHistory"
# 请求参数(对应表格id为fund-I的基金数据)
payload = {"fundId": "I"}
# 模拟AJAX请求的必要头信息
headers = {
    "X-Requested-With": "XMLHttpRequest",
    "Content-Type": "application/x-www-form-urlencoded"
}

response = requests.post(api_url, data=payload, headers=headers)
# 解析返回的JSON数据
data = response.json()

# 定义表头(根据接口返回字段调整)
csv_headers = ["Date", "Price", "NAV"]
# 整理数据行
csv_rows = [[item["Date"], item["Price"], item["NAV"]] for item in data]

# 写入CSV文件
with open("out.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(csv_headers)
    writer.writerows(csv_rows)

说明:方案2更推荐,直接抓API避免了浏览器渲染的开销,数据格式也更规范,无需解析HTML表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:10:36