<span class='python'>
<a>google</a>
<a>chrome</a>
</span>
chrome
これをすでに取得して動作させたいと思っています。
q = item.findall('.//span[@class="python"]//a')
t = q[1].text # first element = 0
これを単一の XPath 式に結合して、リストではなく 1 つの項目を取得したいと思います。
これを試してみましたが、うまくいきません。
t = item.findtext('.//span[@class="python"]//a[2]') # first element = 1
実際の、簡略化されていない HTML は次のようになります。
<span class='python'>
<span>
<span>
<img></img>
<a>google</a>
</span>
<a>chrome</a>
</span>
</span>
ベストアンサー1
これを試してみましたが、うまくいきませんでした。
t = item.findtext('.//span[@class="python"]//a[2]')
//
これは略語に関するFAQです。
.//a[2]
意味:親のa
2 番目の子である現在のノードのすべての子孫を選択しますa
。したがって、具体的な XML ドキュメントに応じて、複数の要素が選択されたり、要素がまったく選択されなかったりする場合があります。
もっと簡単に言えば、[]
演算子は よりも優先順位が高くなります//
。
すべてのノードのうち 1 つ (2 番目) だけを返したい場合は、括弧を使用して必要な優先順位を強制する必要があります。
(.//a)[2]
a
これは実際には現在のノードの2 番目の子孫を選択します。
質問で実際に使用されている表現は、次のように変更します。:
(.//span[@class="python"]//a)[2]
または次のように変更します。
(.//span[@class="python"]//a)[2]/text()