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())
代码解释:
- 定位目标表格:
soup.find_all('tbody')[3]确实指向了页面中“By market capitalization”的表格,这个是对的。 - 跳过表头:通过判断
len(col) == 0跳过没有数据的表头行。 - 提取和清理数据:用
.strip()去掉文本前后的空格,用.replace(',', '')去掉市值里的千位分隔符,再转成浮点数。 - 生成DataFrame:先收集所有行数据到列表,最后一次性创建DataFrame,这是Pandas推荐的高效方式(避免逐行
append带来的性能问题)。
这样运行后,data就会包含所有银行的名称和对应的市值数据啦!
内容的提问来源于stack exchange,提问作者Hamza Siddiqui
相关产品推荐
相关产品推荐

