0

次のような 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 を使用して 2 番目の要素を取得する最良の方法は何ですか? 私はいつでもcssselect('span.green')結果から2番目の要素を選択することができますが、何百もの要素を含む大きなページでは、はるかに遅くなると思います.

4

1 に答える 1

1

これはあなたの質問に対する答えではありませんが、これが私がこれをした方法です:

cssselectの代わりにXPathを使用します。

>>> 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>'
于 2012-06-13T08:03:25.287 に答える