gpt4 book ai didi

python - 在Scrapy中,为什么Xpath表达式中的text()[n]后跟extract()不等于extract()后跟选择第[n-1]个元素?

转载 作者:行者123 更新时间:2023-11-30 22:38:18 25 4
gpt4 key购买 nike

我正在尝试从http://www.apkmirror.com抓取APK下载页面,但我的一些 XPath 表达式没有按照我的预期运行。

例如,在 Scrapy shell 中 http://www.apkmirror.com/apk/google-inc/maps/maps-9-2-0-9-release/maps-9-2-0-android-4-3-902013124-android-apk-download/ ,我提取“APK 详细信息”部分如下:

In [1]: response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]//text()').extract()
Out[1]:
[u'Version: 9.2.0 (902013124)',
u'arm ',
u'Package: com.google.android.apps.maps',
u'\n',
u'40,353 downloads ']

我想提取支持的架构,在本例中是第二行的'arm '。我通过以下方式提取该行

In [2]: response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]//text()[2]').extract()
Out[2]: [u'arm ']

到目前为止,一切顺利,但还有其他页面,例如 http://www.apkmirror.com/apk/htc-corporation/htc-backup/htc-backup-4-5-696121-release/htc-backup-4-5-696121-android-apk-download/其中包含版本的行不存在。在这种情况下我得到

In [3]: response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]//text()').extract()
Out[3]:
[u'Version: 4.5.696121 (454663465) ',
u'Package: com.htc.backup',
u'\n',
u'1,664 downloads ']

奇怪的是,如果我在前面的 XPath 表达式后面添加 [2],我会得到一个空行:

In [2]: response.xpath('//*[@title="APK details"]/following-sibling::*[@class="appspec-value"]//text()[2]').extract()
Out[2]: [u'\n']

这对应于从 extract() 获取的列表的第三个元素,而我希望它仍然是以 Package: 开头的第二行。

简而言之,我的假设似乎是“在 Xpath 表达式中包含 [n]”并调用 extract() 等同于调用 extract() 并从结果列表中选择 [n-1]' 不正确。有人可以证实这一点并解释为什么不吗?

最佳答案

以此 XML 为例:

<r>
<p id="1">
<c>text 1</c>
<c>text 2</c>
<c>text 3</c>
</p>
<p id="2">
<c>text 4</c>
<c>text 5</c>
<c><a>text 6</a><a>text 7</a></c>
</p>
</r>

//c//text()[1] 返回 text 1 - 6,因为它们都是c<下面的第一个文本/code>.



//c//text()[2] 返回 text 7,因为它是 c 下面唯一的第二个文本。



(//c//text())[2] 返回 text 2,因为它是某个 >c.








关于python - 在Scrapy中,为什么Xpath表达式中的text()[n]后跟extract()不等于extract()后跟选择第[n-1]个元素?,我们在Stack Overflow上找到一个类似的问题:

https://stackoverflow.com/questions/43632517/




25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com