<html> <head> <title>My Website</title> </head> <body> <span>Scrapy Hello world</span> <div class='links'> <a href='one.html'>Link 1<img src='image1.jpg'/></a> <a href='two.html'>Link 2<img src='image2.jpg'/></a> <a href='three.html'>Link 3<img src='image3.jpg'/></a> </div> </body> </html>
可以通過(guò) text 或 TextResponse 對(duì)象構(gòu)造選擇器類(lèi)的實(shí)例。根據(jù)所提供的輸入類(lèi)型,選擇器選擇以下規(guī)則:
from scrapy.selector import Selector from scrapy.http import HtmlResponse
Selector(text=body).xpath('//span/text()').extract()
[u'Hello world!!!']
response = HtmlResponse(url='http://yiibai.com', body=body) Selector(response=response).xpath('//span/text()').extract()
它顯示的結(jié)果為:
[u'Hello world!!!']
>>response.selector.xpath('//title/text()')
現(xiàn)在,您可以通過(guò)使用 .extract()方法提取文本數(shù)據(jù),如下所示:
>>response.xpath('//title/text()').extract()
[u'My Website']
>>response.xpath('//div[@class="links"]/a/text()').extract()
Link 1 Link 2 Link 3
>>response.xpath('//div[@class="links"]/a/text()').extract_first()
Link 1
links = response.xpath('//a[contains(@href, "image")]') for index, link in enumerate(links): args = (index, link.xpath('@href').extract(), link.xpath('img/@src').extract()) print 'The link %d pointing to url %s and image %s' % args
Link 1 pointing to url [u'one.html'] and image [u'image1.jpg'] Link 2 pointing to url [u'two.html'] and image [u'image2.jpg'] Link 3 pointing to url [u'three.html'] and image [u'image3.jpg']
Scrapy 允許使用 .re() 方法正則表達(dá)式來(lái)提取數(shù)據(jù)。從上面的HTML代碼中可提取圖像名稱(chēng),如下圖所示:
>>response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')
[u'Link 1', u'Link 2', u'Link 3']
當(dāng)您使用XPaths,它是從 / 開(kāi)始工作的,嵌套選擇器和XPath都關(guān)聯(lián)到文件的絕對(duì)路徑,而不是選擇器的相對(duì)路徑。
>>mydiv = response.xpath('//div')
接下來(lái),可以在里面提取所有 'P' 元素,在XPath前綴加上一個(gè)句點(diǎn) .//p ,如下圖所示:
>>for p in mydiv.xpath('.//p').extract()
EXSLT是一個(gè)社區(qū)它發(fā)出擴(kuò)展XML文檔轉(zhuǎn)換為XHTML文檔XSLT(可擴(kuò)展樣式表語(yǔ)言轉(zhuǎn)換)??梢允褂?EXSLT 擴(kuò)展與 XPath 表達(dá)式來(lái)注冊(cè)名稱(chēng)空間,如下列表中所示:
S.N. |
前綴用法
|
命名空間
|
---|---|---|
1 |
re
正則表達(dá)式
|
http://exslt.org/regular-expressions |
2 |
set
集合操作
|
http://exslt.org/sets |