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

Python新手求教:如何提取HTML表格第2、3列元素并存储到Pandas DataFrame

解决方法:抓取维基百科银行表格并存入Pandas DataFrame

嘿,我来帮你搞定这个网页抓取的问题!你已经有了不错的开头,只需要完善循环里的逻辑,把目标列的数据提取出来并添加到DataFrame里就行。下面是具体的步骤和完整代码:

关键修改点说明:

  • 跳过表头行:表格的第一行是表头(<th>标签),用row.find_all('td')会得到空列表,所以我们要跳过这些行。
  • 提取目标列:HTML表格的列是从0开始索引的,所以第2列对应col[1](银行名称),第3列对应col[2](市值)。
  • 清理数据:提取文本后要去掉多余的空格,市值里的逗号可以去掉并转成数值类型,方便后续分析。
  • 高效添加数据:先把每行数据存入列表,最后一次性生成DataFrame,比逐行追加更高效。

完整代码:

import pandas as pd
from bs4 import BeautifulSoup
import requests

html_data = requests.get('https://en.wikipedia.org/wiki/List_of_largest_banks').text
soup = BeautifulSoup(html_data, 'html.parser')
# 初始化一个列表来存储每行数据
data_rows = []

# 定位到目标表格(按市值排名的表格)
target_table = soup.find_all('tbody')[3]
for row in target_table.find_all('tr'):
    col = row.find_all('td')
    # 跳过没有td的表头行
    if len(col) == 0:
        continue
    # 提取第2列(银行名称)和第3列(市值)
    bank_name = col[1].text.strip()
    # 清理市值数据:去掉逗号,转成浮点数
    market_cap = float(col[2].text.strip().replace(',', ''))
    # 将该行数据存入字典,再添加到列表
    data_rows.append({
        "Name": bank_name,
        "Market Cap (US$ Billion)": market_cap
    })

# 从列表生成DataFrame
data = pd.DataFrame(data_rows)
# 查看前几行验证结果
print(data.head())

代码解释:

  1. 定位目标表格:soup.find_all('tbody')[3]确实指向了页面中“By market capitalization”的表格,这个是对的。
  2. 跳过表头:通过判断len(col) == 0跳过没有数据的表头行。
  3. 提取和清理数据:用.strip()去掉文本前后的空格,用.replace(',', '')去掉市值里的千位分隔符,再转成浮点数。
  4. 生成DataFrame:先收集所有行数据到列表,最后一次性创建DataFrame,这是Pandas推荐的高效方式(避免逐行append带来的性能问题)。

这样运行后,data就会包含所有银行的名称和对应的市值数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:24:08