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

求助:用BeautifulSoup提取嵌套div的HTML表格数据失败,如何解决?

解决HTML解析异常:style标签错误闭合导致BeautifulSoup无法识别div/table的问题

核心问题定位

你遇到的解析失败,根源是HTML里的<style>标签错误地用</script>闭合了——这种语法错误会打乱HTML的结构层级,让BeautifulSoup的解析器无法正确识别后续的<div>、<table>等标签,只能读到错误闭合前的内容。

解决步骤

1. 先修复HTML的语法错误

在解析前,先把错误的闭合标签替换成正确的</style>。用Python的字符串替换就能快速搞定:

# 读取服务器获取的HTML文件内容
with open("your_html_file.html", "r", encoding="utf-8") as f:
    html_content = f.read()

# 修复错误的style标签闭合:把</script>替换成</style>(用1限制只替换第一个错误的,避免影响正常script标签)
fixed_html = html_content.replace("</script>", "</style>", 1)

2. 用BeautifulSoup重新解析修复后的HTML

现在再解析,就能正常找到div和table了:

from bs4 import BeautifulSoup

soup = BeautifulSoup(fixed_html, "html.parser")

# 查找目标div和table(替换成你实际的div属性,比如class或id)
target_div = soup.find("div", {"class": "your-target-div-class"})
if target_div:
    target_table = target_div.find("table")
    print("成功找到目标表格")

3. 提取表格数据并导出CSV

拿到表格后,提取行和单元格数据,用Python内置的csv模块导出:

import csv

if target_table:
    rows = target_table.find_all("tr")
    # 写入CSV文件
    with open("device_data.csv", "w", newline="", encoding="utf-8") as csv_file:
        writer = csv.writer(csv_file)
        # 遍历每一行,提取单元格文本
        for row in rows:
            cells = row.find_all(["td", "th"])
            row_data = [cell.get_text(strip=True) for cell in cells]
            writer.writerow(row_data)
    print("设备数据已导出到device_data.csv")

额外提示

  • 如果不确定错误的闭合标签位置,可以先打印html_content的前几百个字符,定位到<style>块的结尾,确认替换的准确性。
  • 若HTML还有其他语法问题,可尝试用lxml解析器(需先安装:pip install lxml),它对残缺HTML的容错性更强:soup = BeautifulSoup(fixed_html, "lxml")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:56:13