Python 包含特定字符串的文本的Xpath表达式
在网站上,我试图提取包含Python 包含特定字符串的文本的Xpath表达式,python,xpath,scrapy,Python,Xpath,Scrapy,在网站上,我试图提取包含Min:和Target:版本Android的行(见下面的屏幕截图) 在Scrapy shell中,到目前为止,我已经提出了XPath表达式 In [1]: android_version = response.xpath('//*[@title="Android version"]/following-sibling::*[@class="appspec-value"]') 这样,如果我与//text()和extract()连接,我会得到几行,包括我想要的几行: In
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表达式,以仅获取包含Min:
或目标:
的text()
字段
In [7]: android_version.xpath('.//*[contains(text(), "Min:"]')
但这导致了
ValueError: XPath error: Invalid expression in .//*[contains(text(), "Min:"]
例如,我如何构造一个XPath表达式来只获取Min:
行?下面,我提出了以下建议:
In [12]: android_min_version = response.xpath('//*[@title="Android version"]/following-sibling::*[@class="appspec-value"]//text()[starts-with(., "Min:")]')
In [13]: android_min_version.extract()
Out[13]: [u'Min: Android 4.0.3 (Ice Cream Sandwich MR1, API 15) ']
简而言之,要过滤您想要的文本,您需要执行一个普通的//text()
,后跟一个[包含(,“目标字符串”)]
,其中“目标字符串”
是您正在搜索的字符串。(这里我还使用了以开头,而不是包含)。下面,我提出了以下内容:
In [12]: android_min_version = response.xpath('//*[@title="Android version"]/following-sibling::*[@class="appspec-value"]//text()[starts-with(., "Min:")]')
In [13]: android_min_version.extract()
Out[13]: [u'Min: Android 4.0.3 (Ice Cream Sandwich MR1, API 15) ']
简而言之,要过滤您想要的文本,您需要执行一个普通的//text()
,后跟一个[包含(,“目标字符串”)]
,其中“目标字符串”
是您正在搜索的字符串。(这里我还使用了以开头,而不是包含)