【发布时间】:2017-04-25 16:05:25
【问题描述】:
在http://www.apkmirror.com/apk/redditinc/reddit/reddit-1-5-5-release/reddit-1-5-5-android-apk-download/ 网站上,我试图提取包含Min: 和Target: 版本的Android 的行(见下面的屏幕截图)。
在 Scrapy shell 中,到目前为止我已经想出了 XPath 表达式
In [1]: android_version = response.xpath('//*[@title="Android version"]/following-sibling::*[@class="appspec-value"]')
这样,如果我将 .//text() 和 extract() 连接起来,我会得到几行,包括我想要的:
In [2]: android_version_text = android_version.xpath('.//text()').extract()
In [3]: android_version_text
Out[3]:
[u'\n',
u'Min: Android 4.0.3 (Ice Cream Sandwich MR1, API 15) ',
u'\n',
u'Target: Android 6.0 (Marshmallow, API 23)',
u'\n']
我现在想优化 XPath 表达式以仅获取具有 text() 且包含 "Min:" 或 "Target: 的字段。关注XPath contains(text(),'some string') doesn't work when used with node with more than one Text subnode,我试过了
In [7]: android_version.xpath('.//*[contains(text(), "Min:"]')
但这会产生一个
ValueError: XPath error: Invalid expression in .//*[contains(text(), "Min:"]
例如,我如何构造一个 XPath 表达式以仅获取 Min: 行?
【问题讨论】: