【问题标题】:Python lxml cssselect nth matchPython lxml cssselect第n次匹配
【发布时间】:2012-06-13 16:03:25
【问题描述】:

假设我有一些类似的 html:

<div id="content">
  <span class="green">something</span>
  <span class="blue">something</span>
  <span class="red">something</span>
  <span class="green">something</span>
  <span class="yellow">something</span>
</div>

使用 cssselect 获取第二个元素的最佳方法是什么? 我总是可以cssselect('span.green') 然后从结果中选择第二个元素,但是在一个包含数百个元素的大页面中,我想它会慢得多。

【问题讨论】:

  • 好吧,:nth-match() 在 CSS4 中,所以你还不能使用它。
  • 听说过semantic HTML吗?
  • @BoltClock 我希望 lxml 中有一些参数至少会告诉它在找到我要查找的元素后停止查找..

标签: python css-selectors lxml


【解决方案1】:

虽然这不是您问题的答案,但我是这样做的:

使用 XPath 代替 cssselect:

>>> from lxml.etree import tostring
>>> from lxml.html.soupparser import fromstring
>>> x = tostring('<div id="content"><span class="green">something</span><span class="blue">something</span><span class="red">something</span><span class="green">something</span><span class="yellow">something</span></div>')
>>> x.xpath('//span[@class="green"][2]')
[<Element span at b6df71ac>]
>>> x.xpath('//span[@class="green"][2]')[0]
<Element span at b6df71ac>
>>> tostring(x.xpath('//span[@class="green"][2]')[0])
'<span class="green">something</span>'

或者如果您更喜欢 Python 中的元素列表:

>>> x.xpath('//span[@class="green"]')
[<Element span at b6df71ac>, <Element span at b6df720c>]
>>> tostring(x.xpath('//span[@class="green"]')[1])
'<span class="green">something</span>'

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多