【问题标题】:python lxml find <fb:comments /> tagpython lxml 找到 <fb:comments /> 标签
【发布时间】:2012-06-19 14:01:30
【问题描述】:

我正在使用 lxml 来解析一个 html,它的 facebook cmets 标签看起来像这样:

<fb:comments id="fb_comments"  href="http://example.com" num_posts="5" width="600"></fb:comments>

我正在尝试选择它以获取 href 值,但是当我执行 cssselect('fb:comments') 时,我收到以下错误:

The pseudo-class Symbol(u'comments', 3) is unknown

有办法吗?

编辑: 代码:

from lxml.html import fromstring
html = '...'
parser = fromstring(html)
parser.cssselect('fb:comments')  #raises the exception 

【问题讨论】:

  • 请提供您的python代码。

标签: python lxml


【解决方案1】:

cssselect() 方法使用给定的CSS selector 表达式解析文档。在您的情况下,冒号字符(:)是 XML 命名空间前缀分隔符(即&lt;namespace:tagname/&gt;),它与 CSS 伪类语法(即tagname:pseudo-class)混淆。

根据lxml manual,您应该在cssselect() 中使用namespace-prefix|element 语法,以便找到带有命名空间前缀(fb) 的标记(comments)。所以:

from lxml.html import fromstring
html = '...'
parser = fromstring(html)
parser.cssselect('fb|comments')

【讨论】:

  • 太棒了!谢谢,但那是返回 Undefined namespace prefix 知道为什么吗?
  • 也许只用comments(没有命名空间)试试?
  • 请参阅stackoverflow.com/questions/6860013/…,了解如何将命名空间与 cssselect 一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多