You need to enable JavaScript to run this app. 如何使用BeautifulSoup爬取双td结构HTML表格并导出CSV
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BeautifulSoup爬取双td结构HTML表格并导出CSV

代码调整方案

原代码存在的核心问题

  • 遍历逻辑完全错位:原代码先全量查找页面内所有td元素,再在每个td内部嵌套查找td,这种逻辑根本无法获取正确的行结构,收集到的都是零散的单单元格内容,无法组成有效数据集
  • 结构适配错误:当前目标表格是逐行存储键值对的特殊布局(每行第一列是属性名、第二列是对应属性值),和常规表格“逐行存储完整记录”的结构不同,需要把分散在所有行的键值对重组为“属性名做表头、对应值做单行数据”的结构,不能直接把零散收集的内容塞进DataFrame
  • 运行报错隐患:原代码用到了requests、pandas但没有对应导入,且代码中df = pd.DataFrame(output_rows)行存在多余前置缩进,会直接触发未定义变量、缩进错误等运行异常
  • 未做文本清洗:单元格内的换行符、首尾多余空格没有处理,导出的CSV会混入不可见字符,造成列错位、内容断裂

调整后的可运行代码

from bs4 import BeautifulSoup
import requests
import pandas as pd

# 替换为实际目标网页地址
url = "目标页面URL"
resp = requests.get(url)
# 指定html解析器消除运行警告
soup = BeautifulSoup(resp.text, "html.parser")
# 精准匹配目标表格,避免错选页面内其他无关表格
target_table = soup.select_one("table.product-page-specifications")

table_headers = []
table_values = []

# 逐行遍历表格主体的所有<tr>元素
for row in target_table.select("tbody tr"):
    # 提取当前行的所有td单元格
    cells = row.find_all("td")
    # 跳过不符合两列结构的异常空行
    if len(cells) < 2:
        continue
    # 提取属性名:去除首尾多余空格
    prop_name = cells[0].get_text(strip=True)
    # 提取属性值:合并单元格内的换行、多空格为单个正常空格,避免CSV格式错乱
    prop_value = " ".join(cells[1].stripped_strings)
    table_headers.append(prop_name)
    table_values.append(prop_value)

# 重组为单条数据的DataFrame,列名直接对应收集到的属性名
result_df = pd.DataFrame([table_values], columns=table_headers)
print(result_df)

# 导出为CSV,设置utf-8-sig编码避免Excel打开时乱码
result_df.to_csv("product_spec_export.csv", index=False, encoding="utf-8-sig")

导出效果说明

运行代码后生成的CSV完全匹配预期结构:

  • 表头行依次为Product type、Tip2、Material、Size、Color、Content
  • 唯一的数据行依次对应值为1、MMA TIG/WIG、Metal、Universal、Black、Material made of a material as resistant as possible
  • 原单元格内的换行符会被自动合并为正常空格,不会造成CSV列错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:15:04