我們先上一波總結(jié)甸陌,當(dāng)我們抓取網(wǎng)頁的時候瞎惫,我們最常的任務(wù)就是從HTML中將數(shù)據(jù)提取出來,那我們就不得不學(xué)習(xí)數(shù)據(jù)提取庫了胎源。
對于爬取信息的解析棉钧,我們之前已經(jīng)介紹過了正則re、Xpath涕蚤、BeautifulSoup和PyQuery宪卿。而Scrapy還給我們提供了自己的數(shù)據(jù)解析方法,即Selector(選擇器)万栅。
Selector選擇器是基于lxml來構(gòu)建的佑钾,支持Xpath、CSS選擇器以及正則表達式烦粒。功能全面休溶。解析的速度與準(zhǔn)確率都是極高的。
Selector選擇器是一個可以獨立使用的模塊扰她。直接導(dǎo)入模塊就可以實例化使用兽掰。我們使用Scrapy shell來模擬請求實現(xiàn)命令行交互模式。
具體的使用方式可以看下面的代碼:
from scrapy import Selector
content = "<html><head><title>my html</title><body><h3>Hello World</h3></body></head></html>"
selector = Selector(text=content)
print(selector.xpath('/html/head/title/text()'))
# [<Selector xpath='/html/head/title/text()' data='my html'>]
print(selector.xpath('/html/head/title/text()').extract())
# ['my html']
print(selector.xpath('/html/head/title/text()').extract_first())
# my html
print(selector.css('h3::text').extract_first())
# Hello World
當(dāng)然Selector也是支持css選擇器的使用語法的徒役,接下來孽尽,我將使用兩種語法來獲取同一個數(shù)據(jù)。
其中的HTML如下所示:
<html>
<head>
<base />
<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>
該網(wǎng)頁的鏈接如下:
https://docs.scrapy.org/en/latest/_static/selectors-sample1.html
因此忧勿,我打算在終端通過shell的方式杉女,一種交互模式展現(xiàn)給大家。
這部分內(nèi)容就是scrapy向目標(biāo)網(wǎng)站發(fā)起請求狐蜕,返回的結(jié)果宠纯。
通過輸入response.body
,便可以查看到網(wǎng)頁的源代碼了层释。
接下來婆瓜,我會使用兩種數(shù)據(jù)提取的方式教大家把標(biāo)題文本提取出來。
既可以通過xpath語法獲取到數(shù)據(jù)贡羔,也可以通過css選擇器獲取到我們想要的數(shù)據(jù)廉白,是不是覺得很爽!乖寒!
下面的內(nèi)容我就不一一說明了猴蹂,因為我之前也是有寫過關(guān)于xpath和css的文章,如果看不懂楣嘁,建議回看文章磅轻。
# 文本一
response.xpath('//title/text()').extract()
response.css('title::text').extract()
response.selector.xpath("http://a/text()").extract()
# 文本 包括子節(jié)點
response.xpath("http://a[1]//text()").extract()
# 文本 包括子節(jié)點
response.xpath("string(//a[1])").extract()
# 屬性
response.xpath('//img/@src').extract()
response.css('img::attr(src)').extract()
# 混合
response.css('img').xpath('@src').extract()
response.xpath('//img').css('::attr(src)').extract()
本篇文章的內(nèi)容有點少珍逸,主要目的就是帶大家了解一下,scrapy中的Selector的使用方法聋溜,其實只要前面的基礎(chǔ)打得牢固的話谆膳,對于本篇內(nèi)容相信你不到5分鐘就可以掌握了。
最后我還是不得不說.......
最后
沒有什么事情是可以一蹴而就的撮躁,生活如此漱病,學(xué)習(xí)亦是如此!
因此把曼,哪里會有什么三天速成杨帽,七天速成的說法呢?
唯有堅持嗤军,方能成功注盈!
啃書君說:
文章的每一個字都是我用心敲出來的,只希望對得起每一位關(guān)注我的人叙赚。在文章末尾點【贊】当凡,讓我知道,你們也在為自己的學(xué)習(xí)拼搏和努力纠俭。
路漫漫其修遠兮,吾將上下而求索浪慌。
我是啃書君冤荆,一個專注于學(xué)習(xí)的人,你懂的越多权纤,你不懂的越多钓简。更多精彩內(nèi)容,我們下期再見汹想!