運行下列網站Scrapy外殼呼叫的XPath表達式,在Scrapy,如何巢才/文()
我試圖讓文字從線這個 'APK細節' 區域:
我對包含文本的div
以下選擇:
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>
元素內,而其餘行不是。因此,我想使用這個選擇器兩次:獲得/text()
和跨度。爲了避免代碼重複,我想給這個選擇器一個名字,並在稍後與其他人連接。
因此,我試圖在分配名稱
In [95]: apk_details = response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]')
,但如果我這樣做apk_details.xpath('/text()').extract()
,我得到None
。我也試過
In [107]: apk_details.xpath('.//*/text()').extract()
Out[107]: [u'Package: com.lenovo.anyshare.gps']
以下Nested Selectors in Scrapy,但是這給了我「包」行,而不是行之前。
我該如何使用簡單的(/text()
)調用來接下來的選擇器?
你試過'apk_details.xpath('.// text()')。extract()'? – Andersson
Andersson在這裏回答了這個問題 - 「//」是選擇節點的任何後代的符號,反過來,// text()表示任何後代的text()值。因爲xpath不會隔離它的節點(即,您可以從任何節點訪問文檔的任何部分),所以''.''表示您正在從當前節點而不是根節點進行選擇。 – Granitosaurus