Scrapy是一個用於爬取web站點並提取結構化資料的應用框架,通常我們稱之為爬蟲,一款優秀的python爬蟲。
scrapy爬取的資料可被用在資料探勘、資訊處理、歷史資料歸檔等非常廣泛的資料分析和處理領域。
我們可以透過一個簡單的例子來初步瞭解一下如何透過scrapy蜘蛛(spider)爬取web頁面。
import scrapyclass QuotesSpider(scrapy.Spider): name = 'quotes' start_urls = [ 'http://quotes.toscrape.com/tag/humor/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'author': quote.xpath('span/small/text()').get(), 'text': quote.css('span.text::text').get(), } next_page = response.css('li.next a::attr("href")').get() if next_page is not None: yield response.follow(next_page, self.parse)
將這段程式碼儲存為quotes_spider.py。然後執行以下命令:
scrapy runspider quotes_spider.py -o quotes.json#或者:python -m scrapy runspider quotes_spider.py -o quotes.json
執行完畢後,我們得到輸出檔案quotes.json。其內容為如下的json字串:
[ { "author": "Jane Austen", "text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d" }, { "author": "Groucho Marx", "text": "\u201cOutside of a dog, a book is man's best friend. Inside of a dog it's too dark to read.\u201d" }, { "author": "Steve Martin", "text": "\u201cA day without sunshine is like, you know, night.\u201d" },#...]
可以看到,每個專案包含兩個欄位:author和text。
我們現在來分析一下上邊這段程式碼的執行過程。
當執行scrapy runspider quotes_spider.py這個命令後,scrapy會從quotes_spider.py這個指令碼載入其中定義的一個spider,並在爬蟲引擎中執行這個spider定義的一些方法。爬蟲引擎首先開啟start_urls中定義的連結(http://quotes.toscrape.com/tag/humor/),成功後會呼叫預設的回撥函式parse,將響應訊息response作為引數傳入parse函式。parse回撥函式使用css選擇器選取並迴圈遍歷response中的quote物件,從中提取中author和text欄位。並查詢頁面中的next標籤,以確定是否繼續使用同樣的方法爬取和解析“下一頁”。你應該已經注意到了使用scrapy的好處:頁面請求是由scrapy非同步地進行排程和處理的。
這意味著scrapy不需要等待某個請求的完成和處理,它可以同時傳送其他請求或者執行其他業務。同樣,某個請求失敗或異常也不影響其他請求的執行。
除了可以快速爬取頁面,scrapy還提供了一些配置項,用來調控爬取行為。我們可以設定請求間的間隔,可以控制每個域名或每個ip的併發請求數,這樣使得爬取行為看起來不那麼“粗暴”。scrapy甚至提供了擴充套件程式以自動調整這些引數。
當然,作為一個強大的爬蟲框架,scrapy提供的功能遠不止此。
內建增強的css選擇器和xpath表示式,用來選取和解析html和xml檔案,支援使用正則表示式。提供一個互動式shell控制檯,方便編寫和除錯spider。內建多種資料輸出格式(json、csv、xml),並可將資料儲存在多種後端系統(ftp、s3、本地檔案系統)。支援頁面編碼自動檢測豐富的外掛,可用於處理cookies/session,支援http壓縮、鑑權和快取等特性,仿造user-agent等。總的來說,用python做爬蟲,基本繞不開scrapy。我們一起學習吧。
最新評論