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

表格提取问题:BeautifulSoup与Pandas.read_html使用障碍排查

问题排查与解决方案

先说说你遇到的核心错误原因:

  1. BeautifulSoup 使用错误:你调用 soup.find({'class': 'odd'}) 的写法不对。find 方法的第一个参数需要指定标签名(比如 'tr'),第二个参数才是属性筛选。而且你要找的是所有符合条件的行,应该用 find_all 而不是 find(后者只返回第一个匹配项)。
  2. pandas.read_html 参数误用:attrs={'class': 'odd'} 是让 pandas 寻找class 为 odd 的表格,但你的目标是行的 class 为 odd,这完全匹配错了对象。另外,原始 HTML 前半部分的内容可能包含无效标签或干扰代码,导致 pandas 无法正确识别表格结构。
  3. 未利用已知的 HTML 片段位置:既然你已经知道表格从 requests.get(url).content[8359:] 开始,直接解析完整 HTML 反而会被前面的干扰内容影响。

替代解决方案(分两种工具实现)

方案一:用 BeautifulSoup 提取并转成 DataFrame

先截取有效的 HTML 片段,再正确筛选目标行:

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 1. 获取页面内容并截取目标片段
url = "你的目标URL"
response = requests.get(url)
# 截取从8359位置开始的HTML内容(如果有编码问题,可加.decode('utf-8')转成字符串)
target_html = response.content[8359:]

# 2. 解析片段并提取行
soup = BeautifulSoup(target_html, 'html.parser')
# 正确筛选所有class为odd的tr行
odd_rows = soup.find_all('tr', class_='odd')

# 3. 提取每行的单元格数据
table_data = []
for row in odd_rows:
    # 获取该行所有td单元格
    cells = row.find_all('td')
    # 提取每个单元格的文本(strip=True去除多余空格)
    row_content = [cell.get_text(strip=True) for cell in cells]
    table_data.append(row_content)

# 4. 转成DataFrame
df = pd.DataFrame(table_data)
print(df.head())

方案二:直接用 pandas 处理截取后的 HTML 片段

既然已经定位到表格的起始位置,直接把这段片段传给 read_html 即可,避免前面的干扰内容:

import requests
import pandas as pd

url = "你的目标URL"
response = requests.get(url)
target_html = response.content[8359:]

# 解析片段中的表格(假设目标是第一个表格,用[0]取出)
df = pd.read_html(target_html)[0]
# 如果只需要class为odd的行,可以后续筛选(根据实际HTML结构调整筛选逻辑)
odd_rows_df = df[df.apply(lambda row: 'odd' in row.attrs.get('class', []), axis=1)]
print(odd_rows_df.head())

额外注意事项

  • 如果截取后的片段有编码乱码问题,尝试指定编码格式,比如 target_html = response.content[8359:].decode('gbk')(根据页面实际编码调整)。
  • 如果表格里有嵌套标签(比如 <a>、<span>),需要提取文本时可以用 cell.get_text(strip=True),若需要链接则用 cell.find('a')['href'] 提取属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:16:23