能否用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
相关产品推荐
相关产品推荐

