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

Python HTML解析问题:无法完整提取目标文本求助

问题分析与修复方案

问题根源

你的脚本无法提取专辑信息的核心原因有两个:

  1. style属性匹配精度问题:HTML中td标签的style属性是width='99%' style='word-wrap:break-word;',而你用soup.find_all("td", style="word-wrap:break-word")做精确匹配,BeautifulSoup的精确匹配要求属性值完全一致,导致这部分代码根本没找到任何td元素,自然不会把专辑信息加入结果。
  2. 写入文件时换行符无效:你用f.write(line + " ")作为换行,这是无效的语法,应该使用Python标准的"\n",虽然这不会导致内容缺失,但会影响最终文件的格式。

修复后的完整脚本

import requests
from bs4 import BeautifulSoup

# 读取本地HTML文件
with open("C:/temp/pagina.html", "r") as f:
    html = f.read()

soup = BeautifulSoup(html, "html.parser")
extracted_text = []

# 模糊匹配包含目标style的td标签
tds = soup.find_all("td", style=lambda value: value and "word-wrap:break-word" in value)

for td in tds:
    div_tag = td.find("div")
    if div_tag:
        # 提取div内的纯文本,自动过滤冗余标签内容
        full_album_text = div_tag.get_text(strip=True)
        extracted_text.append(full_album_text)

# 提取下载链接的逻辑保留
divs = soup.find_all("div", class_="hidemain")
for div in divs:
    a_tag = div.find("a")
    if a_tag:
        link = a_tag.get("href")
        extracted_text.append(link)

# 用正确的换行符写入文件
with open("links.txt", "w", encoding="utf-8") as f:
    for line in extracted_text:
        f.write(line + "\n")

关键修改说明

  • td标签匹配优化:改用lambda表达式做模糊匹配,只要style属性值里包含word-wrap:break-word就会被选中,避开精确匹配的严格限制。
  • 文本提取简化:直接调用div_tag.get_text(strip=True)提取div内的所有有效文本,自动过滤img标签、nbsp等冗余内容,得到干净的专辑信息。
  • 换行符修正:替换无效的换行符为Python标准的"\n",保证输出文件的每行内容独立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:15:27