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

如何从GitHub爬取的README文件中提取标签内外所有文本

解决GitHub README文本提取问题(标签内外文本全获取)

问题根源

你之前的代码存在两个核心问题:

  1. 输入文本中的HTML实体(如<、")未解码,导致BeautifulSoup无法正确识别标签结构,要么误将转义标签当作普通文本,要么遗漏部分内容。
  2. 使用soup.text后通过split()和join()合并空格,破坏了原有的Markdown格式(如标题、粗体、列表),同时丢失了标签外的部分文本。

正确实现代码

以下代码可完整提取所有文本(包括标签内、标签之间、HTML注释中的文本),同时保留原有格式结构:

from bs4 import BeautifulSoup, Comment
import html

def extract_all_readme_text(raw_content):
    # 解码HTML实体,将转义字符还原为原始HTML标签
    decoded_content = html.unescape(raw_content)
    
    # 解析处理后的HTML内容
    soup = BeautifulSoup(decoded_content, "lxml")
    
    # 收集所有文本片段
    all_text_parts = []
    for element in soup.descendants:
        # 处理独立文本节点(标签外的文本)
        if element.name is None and element.strip():
            all_text_parts.append(element.strip())
        # 处理HTML注释节点(如需保留注释可保留此分支,否则删除)
        elif isinstance(element, Comment) and element.strip():
            all_text_parts.append(f"<!-- {element.strip()} -->")
        # 处理元素标签内的文本(如h1、a标签里的内容)
        elif element.name and element.string and element.string.strip():
            all_text_parts.append(element.string.strip())
    
    # 拼接文本,用单个空格分隔,避免破坏Markdown格式
    return " ".join(all_text_parts)

代码说明

  1. HTML实体解码:通过html.unescape()还原转义字符,确保BeautifulSoup能正确解析标签结构。
  2. 全节点遍历:利用soup.descendants遍历所有节点,覆盖文本节点、元素节点和注释节点,确保无内容遗漏。
  3. 格式保留:仅去除多余空白字符,用单个空格分隔内容,避免破坏Markdown的标题、粗体、链接等格式。
  4. 可选注释处理:如果不需要保留HTML注释,可直接删除处理Comment节点的分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:15:39