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

使用Python提取本地HTML指定标签内文本的问题求助

HTML标签文本提取及批量处理解决方案

你的代码遇到的两个问题,根源分别是:

  • 用re.search只会返回每行的第一个匹配项,无法捕获同一行的多个目标标签
  • 正则表达式里的.*是贪婪匹配,会从第一个目标标签开始,一直匹配到该行最后一个</div>,导致内容提取错误

最优方案:用BeautifulSoup解析HTML(推荐)

正则处理HTML很容易踩坑(比如标签嵌套、换行、额外属性等),用专业的HTML解析库能彻底解决这些问题,代码也更简洁可靠。

步骤1:安装依赖

pip install beautifulsoup4

单个文件处理代码

from bs4 import BeautifulSoup

file_path = "你的目标HTML文件路径.html"
count = 0

with open(file_path, 'r', encoding='utf8') as fp:
    # 解析HTML内容
    soup = BeautifulSoup(fp, 'html.parser')
    # 定位所有符合class的div标签
    target_divs = soup.find_all(
        'div', 
        class_='th-choice-list-name headerViewModeElementLoc th-choice-list-description-value'
    )
    # 遍历提取文本
    for div in target_divs:
        count += 1
        # strip=True自动去除文本前后的空格、换行符
        extracted_text = div.get_text(strip=True)
        print(extracted_text)
        print(f"已提取第 {count} 项")

批量处理50+HTML文件代码

from bs4 import BeautifulSoup
import os

# 替换为你的HTML文件所在文件夹路径
folder_path = "存放HTML文件的文件夹路径"
total_count = 0

# 遍历文件夹内所有HTML文件
for filename in os.listdir(folder_path):
    if filename.lower().endswith('.html'):
        file_full_path = os.path.join(folder_path, filename)
        print(f"\n正在处理文件:{filename}")
        with open(file_full_path, 'r', encoding='utf8') as fp:
            soup = BeautifulSoup(fp, 'html.parser')
            target_divs = soup.find_all(
                'div', 
                class_='th-choice-list-name headerViewModeElementLoc th-choice-list-description-value'
            )
            for div in target_divs:
                total_count += 1
                extracted_text = div.get_text(strip=True)
                print(f"提取内容:{extracted_text}")
                print(f"累计提取:{total_count} 项")

正则修改方案(仅用于简单场景)

如果一定要用正则解决,需要做两处修改:用re.findall捕获所有匹配项,同时用非贪婪匹配.*?限制匹配范围:

import re

file_path = "你的目标HTML文件路径.html"
count = 0

# 读取整个文件内容(避免标签跨分行的情况)
with open(file_path, 'r', encoding='utf8') as fp:
    content = fp.read()

# 非贪婪匹配+全局查找
pattern = re.compile(
    r'<div class="th-choice-list-name headerViewModeElementLoc th-choice-list-description-value">(.*?)</div>',
    re.DOTALL  # 让.匹配换行符,处理标签跨分行的情况
)
matches = pattern.findall(content)

for match in matches:
    count += 1
    # 清理文本中的&nbsp;和多余空格
    clean_text = re.sub(r'&nbsp;|\s+', ' ', match).strip()
    print(clean_text)
    print(f"已提取第 {count} 项")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:15:09