用于“一切”的相对XPath选择器'

时间:2017-07-18 14:28:21

标签: python xpath scrapy

在网站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选择器,它本质上是一个' no-op'并返回输入选择。我认为应该是.//*,但这似乎不起作用。

如果我用

启动Scrapy shell
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

然后,以下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('.//*')连接起来,结果将变为空列表:

In [3]: response.xpath('//*[@title="APK details"]/following-sibling::*//text()')
   ...: .xpath('.//*').extract()
Out[3]: []

什么是正确的' no-op'在这种情况下XPath选择器?

1 个答案:

答案 0 :(得分:0)

根据Psidompaul trmbrth的评论,我终于将text()移到了链式XPath。因此,仍有一些代码重复text(),但小于整个XPath表达式。