ウェブサイトhttp://www.apkmirror.com/apk/opera-software-asa/opera-mini/opera-mini-28-0-2254-119213-release/opera-mini-fast-web-browser-28-0-2254-119213-2-android-apk-download/では、Item Loadersを使用して同じXPathセレクタからいくつかのフィールドを抽出しようとしています。コードの繰り返しを避けるため、nested_xpathメソッドを使用したいと思います。「すべて」の相対XPathセレクタ
この目的のために、私は相対XPathセレクタを本質的に「ノーオペレーション」にして、入力選択を元に戻したいと思います。私は.//*
と思ったが、これはうまくいかない。
私は
scrapy shell http://www.apkmirror.com/apk/opera-software-asa/opera-mini/opera-mini-28-0-2254-119213-release/opera-mini-fast-web-browser-28-0-2254-119213-2-android-apk-download/ -s USER_AGENT=Mozilla
でScrapyシェルを起動する場合は、次のXPath式は私に望ましい結果得られます。
In [2]: response.xpath('//*[@title="APK details"]/following-sibling::*//text()')
...: .extract()
Out[2]:
['Version: 28.0.2254.119213 (281119213)',
'arm ',
'Package: com.opera.mini.native',
'\n',
'183 downloads ']
を私は.xpath('.//*')
でこれを連結しようとする場合は、結果になり空リスト:
正しい 'いいえこの場合、-op 'XPathセレクター?
「no-op XPathセレクタ」_の意味を理解できません。アイテムローダーとnested_xpathを使用していくつかのサンプルHTMLと期待される出力でいくつかのコードを共有できますか? –
@KurtPeek本当にうーん。多分あなたは 'response.xpath( '// * [@ title =" APK details "]/following-sibling :: *')のように' text() 'を連鎖したxpathに移すことができます。 () ')。extract() ' – Psidom
注:lxml(およびScrapy by extension)では、テキストノードをそれ以降のXPath式に適用することはできません。これは制限(またはバグ)です。だから 'response.xpath( '.... // text()').xpath( './ some/xpath')'は常に空の結果を返します。 –