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

如何用Python BeautifulSoup提取td文本存入字典并生成pandas DataFrame

原代码错误点

  • 你已经通过soup.find_all("td",class_="text-center")拿到了元素,后续又在元素下查找,不可能找到匹配节点,导致datas为空,最终字典没有数据
  • 没有按表格行、表头的结构解析数据,直接零散提取无法对应列和行的关系
  • 没有区分三个页面的解析结果,无法生成三个独立的DataFrame

修正后可直接运行的方案

import pandas as pd
import requests
from bs4 import BeautifulSoup

# 加请求头避免被网站反爬拦截
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_list = [
    'https://www.coingecko.com/en/coins/ethereum/historical_data/usd?start_date=2021-08-06&end_date=2021-09-05#panel',
    'https://www.coingecko.com/en/coins/cardano/historical_data/usd?start_date=2021-08-06&end_date=2021-09-05#panel',
    'https://www.coingecko.com/en/coins/chainlink/historical_data/usd?start_date=2021-08-06&end_date=2021-09-05#panel'
]

# 按顺序存储三个页面对应的DataFrame
df_list = []

for url in url_list:
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')
    # 定位页面上的历史数据表
    table = soup.select_one("table.table.table-striped.text-sm.text-gray-900")
    # 提取表格表头
    col_headers = [th.get_text(strip=True) for th in table.select("thead th")]
    # 逐行提取表格内容
    row_data = []
    for tr in table.select("tbody tr"):
        row = [td.get_text(strip=True) for td in tr.select("td")]
        row_data.append(row)
    # 生成当前页面对应的DataFrame存入列表
    df = pd.DataFrame(row_data, columns=col_headers)
    df_list.append(df)

# 三个表格分别对应df_list[0](以太坊)、df_list[1](Cardano)、df_list[2](Chainlink)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:36:06