Python 使用lxml.text\u content()从html提取文本时,如何保留新行
我正在努力学习使用嗖嗖声。我有大量的html文档要搜索。我发现text_content方法产生了一些有趣的问题,例如,我可能有一些文本组织在一个表中Python 使用lxml.text\u content()从html提取文本时,如何保留新行,python,html,lxml,whoosh,Python,Html,Lxml,Whoosh,我正在努力学习使用嗖嗖声。我有大量的html文档要搜索。我发现text_content方法产生了一些有趣的问题,例如,我可能有一些文本组织在一个表中 <html><table><tr><td>banana</td><td>republic</td></tr><tr><td>stateless</td><td>person</td></t
<html><table><tr><td>banana</td><td>republic</td></tr><tr><td>stateless</td><td>person</td></table></html>
结果没有预期的空格
“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>'
但是当我从上面运行相同的代码时,行提要不存在。因此,生成的文本内容与上面的一样。
这对我来说是一个问题,因为我需要能够分离单词,我想我可以在每个td之后添加非中断空格,在行之后添加换行符,以及在body元素之后添加d换行符等,以获得合理地符合我的原始来源的文本
我会注意到,我做了更多的测试,发现在段落标记结束后插入的换行符被保留了下来。但是表格中有很多文本我需要能够搜索
感谢您的帮助您可以使用此解决方案:
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!'
在这里找到:谢谢,但我一直在读到,在处理html时应该避免使用reg表达式。我意识到了这种可能性,但已经避免了这种可能性,在我这样做之前,我可能会求助于使用lxml的手动方法。也就是说,我会按顺序处理找到的每个元素,并使用规则。您的答案让我找到了html2text,我认为这是一个更好的开始,所以我标记了
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!'