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

Python网页表格爬取遇列不匹配报错,求简化实现方案

问题与解决方案

目标表格结构

<table id="id-ofTable">
<tbody>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
</tbody>
</table>

报错信息

ValueError: 无法设置列数不匹配的行

错误原因

  1. 表格ID不匹配:代码中查找id='member-site-info-table',但目标表格ID是id-ofTable,需确保两者一致。
  2. 列数不匹配:原代码将所有<th>文本收集为表头(共4个相同列名),但后续仅提取<td>内容(每行1个值),导致DataFrame列数与每行数据长度不匹配,触发报错。

简洁实现代码

from bs4 import BeautifulSoup
import pandas as pd

# 替换为实际网页内容或请求后的响应文本
html = '''
<table id="id-ofTable">
<tbody>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
<tr>
<th id="row">data point1</th>
<td>data point2</td>
</tr>
</tbody>
</table>
'''

soup = BeautifulSoup(html, 'html.parser')
# 确保表格ID与目标一致
table = soup.find('table', id='id-ofTable')

data = []
for tr in table.find_all('tr'):
    # 提取每行的表头和对应数据
    header = tr.find('th').get_text(strip=True)
    value = tr.find('td').get_text(strip=True)
    data.append({header: value})

# 转换为DataFrame
df = pd.DataFrame(data)
print(df)

代码说明

  • 遍历每个<tr>,分别提取<th>(表头)和<td>(对应数据)的文本。
  • 用字典存储每行的键值对,直接构建DataFrame,自动匹配列名与数据,避免列数不匹配问题。
  • 如果实际网站的表格ID是member-site-info-table,将代码中的id='id-ofTable'替换为对应值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:12