Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 包含特定字符串的文本的Xpath表达式_Python_Xpath_Scrapy - Fatal编程技术网

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()
,后跟一个
[包含(,“目标字符串”)]
,其中
“目标字符串”
是您正在搜索的字符串。(这里我还使用了
开头,而不是
包含