簡體   English   中英

包含特定字符串的文本的Xpath表達式

[英]Xpath expression for text that contains a certain string

在網站http://www.apkmirror.com/apk/redditinc/reddit/reddit-1-5-5-release/reddit-1-5-5-android-apk-download/上 ,我正在嘗試提取包含Android的Min:Target:版本的行(請參見下面的屏幕截圖)。

在此處輸入圖片說明

到目前為止,在Scrapy shell中,我已經提出了XPath表達式

In [1]: android_version = response.xpath('//*[@title="Android version"]/following-sibling::*[@class="appspec-value"]')

這樣,如果我將.//text()extract()連接起來, .//text()得到幾行,包括我想要的行:

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:""Target: "Min:" text()字段。在XPath contains(text(),'some string')之后,當與具有更多內容的node一起使用時,將不起作用我嘗試過一個Text子節點

In [7]: android_version.xpath('.//*[contains(text(), "Min:"]')

但這引起了

ValueError: XPath error: Invalid expression in .//*[contains(text(), "Min:"]

例如,如何構造XPath表達式以僅獲取Min:行?

https://blog.scrapinghub.com/2014/07/17/xpath-tips-from-the-web-scraping-trenches/之后,我想到了以下內容:

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()后接[contains(., "target_string")] ,其中"target_string"是要搜索的字符串。 (在這里,我還使用了starts-with而不是contains )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM