【问题标题】:How do I preserve new lines when extracting text from html using lxml.text_content()使用 lxml.text_content() 从 html 中提取文本时如何保留新行
【发布时间】:2014-12-21 21:14:14
【问题描述】:

我正在努力学习使用 Whoosh。我有大量要搜索的 html 文档。我发现 text_content() 方法会产生一些有趣的问题,例如我可能有一些文本组织在一个看起来像

的表格中
<html><table><tr><td>banana</td><td>republic</td></tr><tr><td>stateless</td><td>person</td></table></html>

当我获取原始字符串并获取树然后使用 text_content 按以下方式获取文本时

mytree = html.fromstring(myString)
text = mytree.text_content()

结果没有空格(正如预期的那样)

'bananarepublicstatelessperson'

我尝试使用 string.replace() 插入新行

myString = myString.replace('</tr>','</tr>\n')

我确认新行存在

'<html><table><tr><td>banana</td><td>republic</td></tr>\n<tr><td>stateless</td><td>person</td></table></html>'

但是当我从上面运行相同的代码时,换行符不存在。因此生成的 text_content() 看起来就像上面一样。 这是我的一个问题,因为我需要能够分隔单词,我想我可以在每个 td 之后添加不间断空格,在行之后添加换行符以及在正文元素等之后添加换行符以获得合理符合我的文本原始来源。

我会注意到我做了一些更多的测试,发现在段落标签关闭后插入的换行符被保留了。但是我需要能够搜索表格中的大量文本。

感谢您的帮助

【问题讨论】:

    标签: python html lxml whoosh


    【解决方案1】:

    你可以使用这个解决方案:

    import re
    def striphtml(data):
        p = re.compile(r'<.*?>')
        return p.sub('', data)
    
    >>> striphtml('<a href="foo.com" class="bar">I Want This <b>text!</b></a>')
    >>> 'I Want This text!'
    

    在这里找到:using python, Remove HTML tags/formatting from a string

    【讨论】:

    • 谢谢你,但我一直读到应该避免使用 reg 表达式来处理 html。我意识到了这种可能性,但已经避免了它,并且在我这样做之前可能会使用 lxml 的手动方法。也就是说,我会在找到每个元素时按顺序处理它们并使用规则
    • 你的回答让我找到了 html2text,我认为这是一个更好的开始,所以我标记了
    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多