、、どのように/テキスト(にのみコールで巣XPath式をする)
私はからのテキストの行を取得しようとしていますこの 'APKの詳細' エリア:
:私は、テキストを含むdiv
ため、次のセレクタを持っています3210
In [91]: response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]').extract()
Out[91]: [u'<div class="appspec-value">Version: 3.0.38_ww (4030038)<br>arm <br><span class="wrapText">Package: com.lenovo.anyshare.gps</span>\n<br>2,239 downloads </div>']
"Package:com.lenovo.anyshare.gps"の行は<span>
要素の内側にありますが、残りの要素は含まれていません。したがって、このセレクタを2回使用すると、/text()
とスパンを得ることができます。コードの繰り返しを避けるために、私はこのセレクタに名前をつけ、後で他の人にそれを連結したいと思います。
したがって、私は名前
In [95]: apk_details = response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]')
を割り当てるが、私はapk_details.xpath('/text()').extract()
をすれば、私はNone
を取得してみました。私はまた、Nested Selectors in Scrapy次
In [107]: apk_details.xpath('.//*/text()').extract()
Out[107]: [u'Package: com.lenovo.anyshare.gps']
を試してみましたが、これは私に「パッケージ」の行ではなく前のラインを提供します。
次のセレクタを単純な(/text()
)コールで使用するにはどうすればよいですか?
あなたは 'apk_details.xpath( '.// text()')を試しましたか? – Andersson
Anderssonはここでの質問にかなり答えました - '//'はノードの子孫を選択するための表記で、 '/ text()'は任意の子孫text()値を意味します。 '.'はルートパスではなく現在のノードから選択していることを示します.xpathはノードを分離しない(つまり、どのノードからでもドキュメントの任意の部分にアクセスできます)。 – Granitosaurus