当前位置: 首页 > 知识库问答 >
问题:

使用Python将超文本标记语言呈现为纯文本

陆光济
2023-03-14

我正在尝试使用BeautifulSoup转换HTML文本块。以下是一个示例:

<div>
    <p>
        Some text
        <span>more text</span>
        even more text
    </p>
    <ul>
        <li>list item</li>
        <li>yet another list item</li>
    </ul>
</div>
<p>Some other text</p>
<ul>
    <li>list item</li>
    <li>yet another list item</li>
</ul>

我试着做了这样的事情:

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)

...但是这样我的span元素总是在新行上。这当然是一个简单的例子。有没有办法在超文本标记语言页面中获取文本,就像它在浏览器中呈现的方式一样(不需要css规则,只是div、spans、li等元素呈现的常规方式)在Python中?

共有2个答案

杨研
2023-03-14

我在尝试解析呈现的HTML时遇到了同样的问题。基本上,BS似乎不是这方面的理想方案@Del提供了很棒的html2text解决方案。

关于一个不同的问题:BeautifulSoup get\u text并没有去除使用nltk提到的所有标记和JavaScript@Helge。不幸的是,nltk似乎正在停止这种方法。

我尝试了html2text和nltk。clean\u html,并对计时结果感到惊讶,因此认为可以为子孙后代提供答案。当然,速度在很大程度上取决于数据的内容。。。

来自@Helge(nltd k)的回答。

import nltk

%timeit nltk.clean_html(html)
was returning 153 us per loop

返回带有呈现html的字符串效果非常好。这个nltk模块甚至比html2text更快,尽管html2text可能更健壮。

上面的答案来自@del

betterHTML = html.decode(errors='ignore')
%timeit html2text.html2text(betterHTML)
%3.09 ms per loop
杜绍元
2023-03-14

BeautifulSoup是一个刮库,因此它可能不是进行HTML呈现的最佳选择。如果没有必要使用BeautifulSoup,那么您应该看看html2text。例如:

import html2text
html = open("foobar.html").read()
print html2text.html2text(html)

这将输出:

Some text more text even more text

  * list item
  * yet another list item

Some other text

  * list item
  * yet another list item
 类似资料:
  • 在我的。java文件,我有 在我的第1页。html文件: 现在,my page1显示: 是否可以将我的结果变量呈现为html,以便我的page1显示一个大的绿色通行证?除了th: text${var}之外,还有其他格式选项吗?我正在使用Spring boot和thymeleaf。我尽量不使用javascript。 类似这样的东西,但对于java

  • 我之所以发布这个问题,是因为许多开发人员或多或少地以不同的形式问同一个问题。我会自己回答这个问题(我是iText Group的创始人/首席技术官),这样它就可以成为“维基答案”如果堆栈溢出的“文档”特性仍然存在,那么这将是文档主题的一个很好的候选者。 我正在尝试将以下HTML文件转换为PDF: 在浏览器中,这种超文本标记语言如下所示: HTMLWorker根本不考虑CSS 当我使用时,我需要创建一

  • 对于上面的html内容,我如何使用Jsoup解析并获取文本 当我使用 我得到了这样的东西

  • 我有一位客户/朋友正在准备通过agencyaccess发送电子邮件。他们需要一个包含所有内容的html文档,并在一个html文档中包含电子邮件的纯文本版本。我想我有一个基本的理解,但有点困惑。我通常使用Mailchimp来处理我的电子邮件营销。 因此,我们将使用常规的html文档 但是,我们是否在此下方的某个地方为纯文本版本声明了另一种mime类型,然后电子邮件客户端选择要显示的类型?这两者是否都

  • 我正在尝试使用放心来检查服务器返回的HTML文档的一些属性。演示该问题的SSCCE如下所示: 现在,此尝试以,这是由所有可能的错误大约 30 秒左右后超时! 如果我用< code>xmlPathConfig()删除这一行。用()。功能(...)当特性“http://Apache . org/XML/features/disallow-DOCTYPE-decl”设置为true时,由于< code>D

  • 我是新来的。我想解析html,但问题是我们必须在中指定的URL,我将在运行时从其他页面响应此URL。有没有办法将收到的网址传递到中?我读过这样的东西: 但是我不知道如何使用它。我很想知道是否有其他方法比jsoup更好。