如何使用lxml.text_content()从html中提取文本时保留新行

时间:2014-10-26 15:59:06

标签: python html lxml 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之后添加不间断的空格,在行之后添加换行符以及在body元素等之后的换行符以获得合理符合我的文本原始来源。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以使用此解决方案:

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