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

能否用pandas读取含style标签的HTML表格?如何提取政党信息

解决思路:结合HTML解析工具提取标签信息 + pandas整合数据

这问题我碰到过类似的!pandas的read_html虽然好用,但它会自动剥离HTML格式标签,只保留纯文本内容,所以藏在<em>标签里的政党信息直接拿不到,得搭配HTML解析工具来搞定。

推荐用requests(获取页面内容)+BeautifulSoup(解析HTML标签),这俩是Python生态里处理HTML的标配工具,和pandas配合起来非常顺畅。

具体步骤代码示例

1. 先装必要工具(没装的话)

pip install requests beautifulsoup4 pandas

2. 完整实现代码

import pandas as pd
import requests
from bs4 import BeautifulSoup

# 1. 获取页面原始HTML内容
url = 'http://clerk.house.gov/member_info/olmbr.aspx'
response = requests.get(url)
response.encoding = 'UTF-8'  # 保证编码和页面一致
soup = BeautifulSoup(response.text, 'html.parser')

# 2. 解析HTML提取政党信息
# 先定位到议员表格(打开页面源码确认表格的class/id,这里用示例class)
member_table = soup.find('table', {'class': 'table'})
rows = member_table.find_all('tr')[1:]  # 跳过表头行

party_list = []
for row in rows:
    name_cell = row.find('td')  # 姓名在表格第一列
    # 判断姓名是否被<em>标签包裹:有则是民主党,无则是共和党
    if name_cell.find('em'):
        party_list.append('民主党')
    else:
        party_list.append('共和党')

# 3. 用pandas读取表格数据,合并政党列
df_list = pd.read_html(url, header=0, encoding="UTF-8")
house = df_list[0]
# 把提取的政党信息添加到DataFrame
house['政党'] = party_list

# 查看结果
print(house.head())

关键细节说明

  • 为什么不能只用pandas?:read_html的设计目标是提取表格的结构化数据,会自动忽略所有HTML格式标签(比如<em>),所以没法从它返回的结果里反向判断原始标签状态。
  • BeautifulSoup的作用:它能精准定位HTML元素,保留标签结构,让我们能直接判断每个姓名的包裹标签,从而确定政党属性。
  • 表格定位要注意:代码里的{'class': 'table'}是示例,你需要打开页面源码,确认目标表格的具体属性(比如class、id),确保find能准确找到对应的表格,避免拿到错误内容。

备选方案:用lxml解析

如果你习惯用lxml(另一个高效的HTML解析库),也可以替换BeautifulSoup,核心思路完全一致:先解析页面提取标签信息,再和pandas的表格数据合并。不过BeautifulSoup的语法更直观,适合新手上手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:30