1. 程式人生 > >scrapy簡單入門及例項講解(一)

scrapy簡單入門及例項講解(一)

初識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" }, ... ]

剛剛發生了什麼

  1. 當你執行scrapy runspider vqq_spider.py這個命令,Scrapy會通過它的抓取引擎尋找vqq_spider.py中定義的Spider類
  2. 爬蟲從你定義的start_urls為起點來構造請求,然後呼叫預設回撥方法parse,把response物件作為引數
  3. parse回撥函式中,我們使用xpath提取視訊連結元素,yield一個python字典物件包含視訊標題和地址

在這裡我們會看到,Scrapy的核心是計劃和非同步處理,也就是說,Scrapy不會停下等待前一次的處理結束,而是直接傳送下一次的請求,當前一次的請求完成時會通過回撥來處理。

這可以極大的加快我們的抓取速度,當然,Scrapy也給了你配置這些東西的方法,你可以配置兩次下載之間的延遲、對每個IP或域名的同時請求限制、甚至使用auto-throttling extension(自動限制擴充套件)來自動限制

下期預告

下一步,我們將帶領大家完成Scrapy安裝專案建立Spider編寫