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

HTML结构变更引发NoneType错误,网页爬取数据格式处理求助

解决HTML爬取中空标签及数据提取问题

我在爬取赛马结果页面时遇到了两个核心问题:

  1. 页面存在空的<td>标签,导致通过邻节点查找数据时频繁出现'NoneType' object has no attribute 'findNext'错误
  2. 更新代码后能拿到包含表头和数据的列表,但无法正确提取表头对应的目标值(比如GOOD、2:05:1这类)

问题场景

爬取的HTML存在两种情况:

  • 存在空<td>的异常结构:

<td><strong>Track Rating:</strong> GOOD</td> <td></td> <td><strong>Gross Time:</strong> 1:56:5</td> <td><strong>Mile Rate:</strong> 1:56:5</td>

  • 结构完整的正常HTML:

<td><strong>Track Rating:</strong> GOOD</td> <td><strong>Gross Time:</strong> 2:29:6</td> <td><strong>Mile Rate:</strong> 1:58:6</td> <td><strong>Lead Time:</strong> 30.3</td>

当前代码与输出

更新后的代码片段:

tableoftimes = race.find('table', class_='raceTimes')
for row in tableoftimes.find_all('tr'):
    string23 = [td.get_text() for td in row.find_all('td')]

输出的列表格式:

['Track Rating: GOOD ', 'Gross Time: 2:05:1 ', 'Mile Rate: 1:56:4 ', 'Lead Time: 8.1 ']
['First Quarter: 29.4 ', 'Second Quarter: 32 ', 'Third Quarter: 28.4 ', 'Fourth Quarter: 27.2 ']
['Margins: HFHD x HFNK']

解决方案

针对这个情况,我们可以把每个列表项拆分成表头和值,存入字典,这样就能轻松提取目标数据,同时避开空标签的问题:

tableoftimes = race.find('table', class_='raceTimes')
# 初始化一个字典来存储所有提取的数据
race_data = {}

for row in tableoftimes.find_all('tr'):
    # 遍历每一行的每个td文本,先去除前后空格
    for item in [td.get_text().strip() for td in row.find_all('td')]:
        # 按冒号分割表头和数据,只分割一次避免值里有冒号的情况
        if ': ' in item:
            key, value = item.split(': ', 1)
            race_data[key] = value

# 现在可以直接通过键名获取对应的数据,不存在的键设默认值避免报错
trackrating = race_data.get('Track Rating', '')
grosstime = race_data.get('Gross Time', '')
milerate = race_data.get('Mile Rate', '')
leadtime = race_data.get('Lead Time', '')
firstquarter = race_data.get('First Quarter', '')
# 其他字段同理...

方案说明

  • 用strip()去除文本前后的空格,避免分割时出现无效内容
  • 使用split(': ', 1)确保只分割第一个冒号,防止值里包含冒号导致数据拆分错误
  • 用字典的get()方法获取值,不存在的字段会返回指定默认值(空字符串/None均可),完美兼容空标签导致的数据缺失场景,不会触发报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:57:45