【问题标题】:Lxml cssselect wildcardLxml cssselect 通配符
【发布时间】:2011-08-01 05:54:29
【问题描述】:

如何使用 cssselect 获取所有通配符元素?

例如:

content = """
<table>
<tr id='Awesome1234'><a href="link1"></a></tr>
<tr id='Awesome5678'><a href="link2"></a></tr>
</table>
"""
doc = lxml.html.fromstring(html)
links = lxml.cssselection('tr.Awesome* a')
for link in links:
    print link.get('href')

我希望它输出:

 link1
 link2

这可以通过 cssselect 实现吗?如果没有,我怎么能得到这个? (xpath?)

【问题讨论】:

  • 好问题,+1。有关完整且简短的单行 XPath 解决方案,请参阅我的答案。 :)

标签: html xpath screen-scraping lxml


【解决方案1】:

^= 比较运算符似乎适合您:

tr[id^=Awesome] a

【讨论】:

    【解决方案2】:

    使用以下 XPath 表达式(不需要 css):

    tr[starts-with(@id, 'Awesome')]
    

    此 XPath 表达式选择上下文节点的所有 tr 子节点,这些子节点具有 id 属性,其字符串值以字符串 'Awsome' 开头。

    【讨论】:

    • 在匹配字符串中使用括号会给我 SelectorSyntaxError: Operator expected, got \
    • @Amalgovinus,这意味着您已经以某种方式将 XPath 表达式提供给 CSS。 XPath 表达式必须由 XPath 引擎处理——在本例中很可能由 JavaScript 中可用的引擎处理。这个问题被标记为“xpath”——因此是 XPath 解决方案:) 请注意,OP 正在询问(在问题的末尾)XPath 解决方案。
    • 是的,我正在将 XPath 垃圾传递给 css 函数——它倒退了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多