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

如何从结构不规范的网页爬取数据并提取标签对应信息?

不规范HTML数据提取解决方案

问题描述

用户提供了一段带有MIME编码残留的不规范HTML内容,以及基于requests+BeautifulSoup的基础解析代码,期望提取出如下格式的目标数据:

Address : 406 Pine Run, Knightdale, NC 27545
Dispatch Region : 7
Market: Triangle

并提出三个技术问题:

  1. 能否从上述结构不规范的HTML内容中提取出指定格式的目标数据?
  2. 如何识别此类HTML的结构,以获取各标签对应的详情信息?
  3. 如何从这类结构不规范的网站中完成数据爬取?

解答

1. 完全可以提取目标数据

这段HTML的核心问题是Quoted-Printable编码残留(比如属性里的3D",是编码后的双引号),但内容的逻辑结构是清晰的:字段名和对应值的关联关系、标签层级都有规律可循,只要先清理编码垃圾,再用BeautifulSoup定位即可完成提取。

2. 识别此类HTML结构的方法

  • 先清理编码残留:把所有3D"替换成",修复属性格式(比如class='3D"MsoNormal"'修正为class="MsoNormal"),让BeautifulSoup能正确解析标签结构。
  • 定位关键特征:字段名(Address、Dispatch Region、Market)都在<b>标签内,对应的值都在带有background:whitesmoke样式的<td>标签里,两者呈现“字段名标签→后续数据表格”的前后关联结构。
  • 梳理层级关系:每个字段的结构链为:<p><b>字段名</b></p> → 紧邻的<table> → 内部<td style="background:whitesmoke">标签内的文本即为对应值。

3. 针对不规范HTML的爬取步骤

步骤1:预处理清理编码垃圾

先对获取到的HTML内容做编码修复,解决Quoted-Printable编码残留问题:

# 清理编码残留,修复属性格式
clean_html = html_content.replace('3D"', '"').replace("='", "='\"").replace('&quot;', '"')

步骤2:用BeautifulSoup解析提取数据

利用字段名和数据标签的特征,精准匹配对应内容:

import requests
from bs4 import BeautifulSoup

html_content = """[用户提供的原始HTML内容]"""

# 预处理清理编码残留
clean_html = html_content.replace('3D"', '"').replace("='", "='\"").replace('&quot;', '"')

soup = BeautifulSoup(clean_html, 'html.parser')

# 提取所有字段名(<b>标签内的文本)
field_names = [b.get_text(strip=True) for b in soup.find_all('b')]
# 提取所有对应值(背景为whitesmoke的td内的文本)
field_values = [td.get_text(strip=True) for td in soup.find_all('td', style=lambda s: s and 'background:whitesmoke' in s)]

# 按要求格式输出结果
for name, value in zip(field_names, field_values):
    print(f"{name} : {value}")

步骤3:复杂场景的补充方案

  • 若字段和值的关联不是严格前后对应,可通过父节点遍历定位:找到字段名所在的<p>标签,遍历其后续兄弟节点,找到包含数据的表格。
  • 若编码残留更严重,可直接使用Python内置的quopri模块解码Quoted-Printable编码:
import quopri
# 直接解码Quoted-Printable编码的HTML内容
decoded_html = quopri.decodestring(html_content).decode('utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:55:30