2017-04-13 4 views
0

、どのように/テキスト(にのみコールで巣XPath式をする)

http://www.apkmirror.com/apk/shareit-technologies-co-ltd/shareit-connect-transfer/shareit-3-0-38_ww-release/shareit-3-0-38_ww-android-apk-download/

私はからのテキストの行を取得しようとしていますこの 'APKの詳細' エリア:

enter image description here

私は、テキストを含む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())コールで使用するにはどうすればよいですか?

+2

あなたは 'apk_details.xpath( '.// text()')を試しましたか? – Andersson

+1

Anderssonはここでの質問にかなり答えました - '//'はノードの子孫を選択するための表記で、 '/ text()'は任意の子孫text()値を意味します。 '.'はルートパスではなく現在のノードから選択していることを示します.xpathはノードを分離しない(つまり、どのノードからでもドキュメントの任意の部分にアクセスできます)。 – Granitosaurus

答えて

0

Anderssonによって与えられ、確認してGranitosaurusで説明したように答えは、これは元のXpathに/text()を呼び出すことによって、含まれていなかったにもかかわらず、興味深いことに

In [109]: apk_details.xpath('.//text()').extract() 
Out[109]: 
[u'Version: 3.0.38_ww (4030038)', 
u'arm ', 
u'Package: com.lenovo.anyshare.gps', 
u'\n', 
u'2,239 downloads '] 

、これはPackage行が含まれています表現。これは、//<span>要素を含む任意の子孫を参照するためです。しかし、これは実際に私が好むものです。

0

参考にしてください。

In [120]: response.xpath('//[@id="file"]/div[1]/div[1]/div/div[1]/div[2]//text()').extract() 

Out[120]: 
[u'Version: 3.0.38_ww (4030038)', 
u'arm ', 
u'Package: com.lenovo.anyshare.gps', 
u'\n', 
u'2,239 downloads '] 

In [121]: vd=response.xpath('//* 
    [@id="file"]/div[1]/div[1]/div/div[1]/div[2]//text()').extract() 

In [122]: for v in vd: 
    ...:  print v 
    ...:  
Output: 

    Version: 3.0.38_ww (4030038) 
    arm 
    Package: com.lenovo.anyshare.gps 
    2,239 download 
関連する問題