scrapy學習——選擇器
阿新 • • 發佈:2018-12-25
之前已經學習過HTML頁面解析的一些內容,其中介紹了選擇器的相關知識,接下來深入的學習選擇器。
Scrapy的選擇器是基於lxml,也就是說二者在原理和速度上是一致的。
構造選擇器
Scrapy selector是以 文字(text) 或
TextResponse
構造的Selector
例項。其根據輸入的型別自動選擇最優的分析方法(XML
vs HTML):
>>> from scrapy.selector import Selector
>>> from scrapy.http import HtmlResponse
以文字構造:
>>> body = '<html><body><span>good</span></body></html>'
>>> Selector(text=body).xpath('//span/text()').extract()
[u'good']
以response構造:>>> response = HtmlResponse(url='http://example.com', body=body)
>>> Selector(response=response).xpath('//span/text()' ).extract()
[u'good']
使用選擇器
這裡是它的HTML原始碼:
<html> <head> <base href='http://example.com/' /> <title>Example website</title> </head> <body> <div id='images'> <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>非常簡單的一個頁面。<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a> <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a> <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a> <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a> </div> </body> </html>
通過scrapy shell對這個頁面進行測試。
四種寫法都是選擇title標籤中的文字。1.使用xpath來選擇;2和3使用Scrapy提供的方法response.xpath()和response.css(),4使用的是css3偽類來選擇文字或屬性節點的。
巢狀選擇器
選擇器方法( .xpath()
or.css()
)返回相同型別的選擇器列表,因此你也可以對這些選擇器呼叫選擇器方法。下面是一個例子:
正則表示式使用選擇器
字元匹配相關內容一定少不了正則表示式。選擇器也可以使用正則來提取資料。
對字串使用re()方法來書寫正則。
使用相對XPaths
xpath的語法參見http://www.w3school.com.cn/xpath/
相對XPaths與相對路徑有點相似,都是以“.”點字首開始路徑的書寫。
使用EXSLT擴充套件
因建於 lxml 之上, Scrapy選擇器也支援一些 EXSLT 擴充套件,可以在XPath表示式中使用這些預先制定的名稱空間。