【问题标题】:Beautiful Soup - Strip Page Content for NLPBeautiful Soup - 为 NLP 剥离页面内容
【发布时间】:2022-10-02 00:59:20
【问题描述】:

我正在创建一个新闻解析器,它可以汇总来自不同站点的新闻并根据新闻内容创建关键字。大多数新闻来源将新闻内容包装在article 标记内,因此我从站点中提取它以获取内容。

问题是,当使用漂亮的汤时,它会返回文章标签内的原始 HTML,其中有时包含图像、链接和标签,如<b>。我的问题是,有没有一种简单的方法可以像用户看到的那样获取页面的书面内容?这意味着忽略所有不是文本的内容。我唯一拥有的是遍历文章中的每个标签并检查内部 HTML 中的文本内容。我还没有这样做的原因是:

  • 标签内可能有多个我需要解析的标签;
  • 有些标签需要忽略,例如浏览器不显示的脚本标签;
  • 在漂亮的汤库或其他以 HTML 为中心的库中可能有一种内置方式来执行此操作

一个例子,下面的p标签

<p>
    hello <b>world</b> </br> <img src=\"world.png\">. fine <a href=\"#\"> day </a> isn\'t it?
</p>

会成为

hello world. fine day isn\'t it?

那么,有没有更好的方法来使用 Beautiful Soup 或者其他 html 解析库来提取页面文本信息呢? 注意:我不关心渲染 JS - script 标签可以忽略。

    标签: python html beautifulsoup


    【解决方案1】:

    使用getText() 仅获取“文本”:

    p = soup.find('p')
    print(p.getText())
    
    
        hello world  . fine  day  isn't it?
    
    

    要删除所有前导/尾随空格,请添加 strip();

    print(p.getText().strip())
    
    hello world  . fine  day  isn't it?
    

    world. 之间的额外空间是图像的剩余空间。 如果您确定每个图像都在一个空格之后,您可以从技术上删除它们。

    【讨论】:

      【解决方案2】:

      我最终使用了html2text。它会忽略脚本标签中的文本(BS getText 不会)并且可以处理内部 html。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2021-05-31
        • 2014-07-11
        • 2021-09-24
        相关资源
        最近更新 更多