【问题标题】:How to get text in angle brackets with lxml or bs如何使用 lxml 或 bs 获取尖括号中的文本
【发布时间】:2017-06-08 08:33:37
【问题描述】:

我想提取尖括号中的文本,例如:

<p><verb></p>

结果应该是&lt;verb&gt;。

lxml 和 bs4 在这种情况下不起作用,它们似乎将 &lt;verb&gt; 作为 html 标记。他们无法解析尖括号中的文本,只能返回空字符串。

那么,有什么解决办法吗? THX!

【问题讨论】:

  • 这些库做正确的事。 XML 文档中尖括号中的单词是 not 文本,它是一个元素。如果您想使用 XML 解析器解析您的文档,请适当地使用 XML 语法(这里,要获得您想要的结果,应该是 &lt;p&gt;&amp;lt;verb&amp;gt;&lt;/p&gt;。
  • 你也可以使用regex
  • @spectras 实际上,我不是网页构建者。构建器并不意味着将其作为 HTML 标记,并使用尖括号而不是 &lt 或 &gt 只是为了简单起见。我认为库应该检查标签的合法性。我只想提取它,它位于许多 p 标签中。缺少的文本对于构建后续文本很重要。
  • @SimmerChan> 标签是合法的。 XML 允许文档中的任意元素。当您说 “构建器并不意味着将其作为 HTML 标记并使用尖括号而不是 &lt 或 &gt 只是为了简单”,您只是说构建器使用的语法看起来像 HTML,但不是 HTML。难怪 HTML 解析器不会给出您想要的结果:您不再解析 HTML,而是看起来像它的自定义语言。这就像在您的问题中写 **this** 并抱怨网站将其视为粗体,而您的意思是原始星号。

标签: python regex beautifulsoup lxml


【解决方案1】:

这个怎么样?

import re
my_str = "<p><verb></p>"
my_new_string = re.sub('[\<p\>|\<\/p\>]', '', my_str)
print my_new_string

输出:动词

【讨论】:

  • 其实我不想用re。示例 p 标记位于多个 p 标记中,这意味着我必须找到示例 p 标记,然后使用 re。我只是想知道我是否可以使用其他普通 p 标签处理示例 p 标签,使用一致的方法而不是不同的策略。THX!离开
猜你喜欢
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 2021-03-23
  • 2010-11-05
  • 2022-01-09
相关资源
最近更新 更多