【问题标题】:Adding spaces on word boundaries in text extraction with lxml使用 lxml 在文本提取中的单词边界上添加空格
【发布时间】:2014-05-28 12:47:46
【问题描述】:

来自lxml.html 文档的示例:

>>> from lxml import html
>>> root = html.fragment_fromstring('<p>Hello<br>world!</p>')
>>> html.tostring(root,method='text')
'Helloworld!'

我的问题:是否有任何简单(或“正确”)的方式来生成 'Hello world!' 字符串?

【问题讨论】:

  • 在将解析的 HTML 转换为字符串之前,我会尝试用 " " 替换 &lt;br&gt; 标记...我不知道 lxml 所以我不能说你如何实现它...

标签: python html-parsing lxml


【解决方案1】:

你可以试试这个方法:

from lxml import html
doc = html.document_fromstring('<p>Hello<br>world!</p>')

for br in doc.xpath("*//br"):
    br.tail = " " + br.tail if br.tail else " "

doc.text_content()

打印出来:

'Hello world!'

【讨论】:

  • 我明白了……但我正在寻找一种 generic 方法。比如,&lt;p&gt; 标签中的文本呢?任何其他标签?恕我直言,最好的解决方案是告诉tostring()“分隔符”字符,例如join()
  • 好吧,告诉它分隔符是微不足道的,您可以编写自己的函数通过简单的替换或一些正则表达式来做到这一点。问题是如何决定用分隔符替换什么?因为
    绝对是一个与空格不同的字符,所以应该这样对待。您可能认为替换它很明显,但这只是您的情况。其他案例有其他要求,没有案例是“自然”到足以实现这种行为的。尽管如此,这些特定情况很容易通过 xpath、正则表达式和其他字符串操作来临时实现。
  • 我同意。在我的例子中,我只是简单地将*//br 替换为//*,然后将\s+ 替换为re 的单个空格。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2018-10-06
相关资源
最近更新 更多