scrapy簡單入門及例項講解(一)
阿新 • • 發佈:2018-12-09
初識Scrapy
Scrapy是一個用於Web網站抓取的應用框架,輸出的結構化資料可以廣泛用於各類程式,比如:資料探勘、資料處理、資料存檔等
儘管Scrapy是為Web抓取設計的,但也可以用於從API中提取資料
通過一個例項認識spider
為了快速認識Scrapy的使用,我們來看一個最簡單的爬蟲程式碼
import scrapy
class VqqSpider(scrapy.Spider):
name="vqq_spider"
start_urls=["https://v.qq.com/"]
def parse(self, response) :
for item in response.xpath('//div[contains(@class, "figure_detail")]/strong/a'):
yield {
"title": item.xpath('./@title').extract_first(),
"href": item.xpath('./@href').extract_first()
}
把這些程式碼存到一個文字檔案中,比如:vqq_spider.py
,然後用runspider
命令來執行這個程式
scrapy runspider vqq_spider.py -o data.json
當抓取結束後,我們會看到一個叫做data.json
的檔案,你可以用文字編輯器來開啟這個檔案,其中的內容如下
[{
"title": "93天!滴滴100萬懸賞金到賬 打撈隊:更新裝置",
"href": "//v.qq.com/x/cover/en115zjpqaip73q/g1428tfr3eh.html"
},
{
"title": "",
"href": "//v.qq.com/x/cover/278n2ax690efzwm/c0781k6a8pr.html"
},
{
"title": "王珞丹走紅毯被粉絲單膝跪地求婚 嚇到連連後退",
"href": "//v.qq.com/x/page/d0781ipg0vq.html"
},
{
"title": "圍觀潮音小哥哥起床:排練辛苦周震南起床氣爆發?",
"href": "//v.qq.com/x/cover/ftdfm7cu9kd60n6/l0027th6cf1.html"
},
{
"title": "S.H.E新歌超大回憶殺!還原Selina燒傷事故現場",
"href": "//v.qq.com/x/cover/ffjb4l090uellgu/p07791knw4u.html"
},
{
"title": "你吃過連果肉都是血紅色的蘋果嗎?這5種奇葩水果,一般人都沒見過",
"href": "//v.qq.com/x/page/f0778qibc6i.html"
},
{
"title": "《如懿傳》獨家花絮 貴妃原來是後宮的學霸",
"href": "//v.qq.com/x/page/h002763rmog.html"
},
...
]
剛剛發生了什麼
- 當你執行
scrapy runspider vqq_spider.py
這個命令,Scrapy會通過它的抓取引擎尋找vqq_spider.py
中定義的Spider類 - 爬蟲從你定義的
start_urls
為起點來構造請求,然後呼叫預設回撥方法parse
,把response物件作為引數 - 在
parse
回撥函式中,我們使用xpath提取視訊連結元素,yield一個python字典物件包含視訊標題和地址
在這裡我們會看到,Scrapy的核心是計劃和非同步處理
,也就是說,Scrapy不會停下等待前一次的處理結束,而是直接傳送下一次的請求,當前一次的請求完成時會通過回撥來處理。
這可以極大的加快我們的抓取速度,當然,Scrapy也給了你配置這些東西的方法,你可以配置兩次下載之間的延遲、對每個IP或域名的同時請求限制、甚至使用auto-throttling extension(自動限制擴充套件)來自動限制
下期預告
下一步,我們將帶領大家完成Scrapy安裝
、專案建立
和Spider編寫