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

如何使用Python的BeautifulSoup库提取雅虎财经页面的表格数据

实现方案

前置依赖

先安装需要用到的第三方库:

pip install requests beautifulsoup4 pandas

核心逻辑说明

雅虎财经有基础反爬机制,请求时必须携带User-Agent请求头模拟浏览器访问,否则会返回403拒绝访问。页面内的历史行情表格的class属性为W(100%) M(0),直接定位该标签后逐行提取内容即可。

完整可运行代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 请求头,模拟Chrome浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
url = "https://finance.yahoo.com/quote/GC%3DF/history?p=GC%3DF"

# 发送请求获取页面内容
response = requests.get(url, headers=headers)
response.raise_for_status()  # 请求失败直接抛出异常

# 解析页面
soup = BeautifulSoup(response.text, "html.parser")
# 定位历史行情表格
table = soup.find("table", class_="W(100%) M(0)")

if not table:
    print("未找到目标表格,页面结构可能已更新")
else:
    # 提取表头
    headers_list = [th.get_text(strip=True) for th in table.thead.find_all("th")]
    # 提取表格行数据
    rows_data = []
    for tr in table.tbody.find_all("tr"):
        row = [td.get_text(strip=True) for td in tr.find_all("td")]
        # 过滤长度不匹配的注释行(如分红、拆股提示行)
        if len(row) == len(headers_list):
            rows_data.append(row)
    # 转成DataFrame方便后续处理
    df = pd.DataFrame(rows_data, columns=headers_list)
    # 打印前10行验证
    print(df.head(10))
    # 可选:保存为csv文件
    # df.to_csv("gold_history.csv", index=False, encoding="utf-8-sig")

注意事项

  • 如果运行时找不到表格,可手动打开页面检查表格的class属性是否有更新,替换代码中对应参数即可
  • 请勿高频批量请求,避免IP被雅虎财经限制访问
  • 表格内的特殊行(如股息、拆股公告行)结构和普通行情行不同,代码中已经做了基础过滤,你可以根据自身需求调整过滤规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:15:03