如何使用Beautiful Soup提取列结构不规则的HTML表格指定内容
不规则HTML表格分段提取解决方案
实现思路
- 定位目标表格后逐行遍历,优先判断每行内是否存在
columnspan属性为6的td元素,作为分段边界 - 用状态标记位区分当前行所属的分段区间,分别存储对应区间的行数据
- 自动适配前段3列内容的不定行数,无需硬编码行数阈值
可直接运行的修改代码
import pandas as pd import requests from bs4 import BeautifulSoup url = "替换为你的目标网页地址" page = requests.get(url) soup = BeautifulSoup(page.text, 'html.parser') # 定位首个表格 target_table = soup.find_all('table')[0] # 分别存储跨列行前3列内容、跨列行后4列内容 before_colspan_rows = [] after_colspan_rows = [] # 状态标记:是否已经遇到columnspan=6的行 meet_6col_span = False for tr in target_table.find_all('tr'): # 先判断当前行是否存在columnspan=6的td colspan_6_td = tr.find('td', attrs={'colspan': '6'}) if colspan_6_td: meet_6col_span = True # 如果需要保留跨列行内容可以自行添加存储逻辑,此处跳过跨列行 continue # 提取当前行所有td的文本 row = [] for td in tr.find_all('td'): row.append(td.text.replace('\n', '').strip()) # 过滤空行 if not row: continue # 按状态存入对应列表 if not meet_6col_span: before_colspan_rows.append(row) else: after_colspan_rows.append(row) # 分别导出两个分段的DataFrame df_before = pd.DataFrame(before_colspan_rows) df_after = pd.DataFrame(after_colspan_rows) # 可自行选择导出为csv或者打印查看 # df_before.to_csv('前3列段数据.csv', index=False, encoding='utf-8-sig') # df_after.to_csv('后4列段数据.csv', index=False, encoding='utf-8-sig')
自定义调整说明
- 如果需要提取所有
columnspan=6行分隔的多段内容,可以把分段存储改为列表嵌套结构,每遇到一次跨列行就新建一个分段存储列表 - 如果跨列行本身的内容也需要保留,删除代码中跨列行判断后的
continue语句,新增对应存储逻辑即可 - 如果需要过滤后续其他跨列单列表行,可增加对行长度的判断,仅保留长度为4的行存入
after_colspan_rows
内容的提问来源于stack exchange,提问作者Mankensin
相关产品推荐
相关产品推荐

