Python爬蟲的作用與地位(附爬蟲技術路線圖)
小編說:網路爬蟲是一種伴隨著網際網路誕生與演化的“古老”的網路技術,隨著網際網路進入大資料時代,爬蟲技術迎來了一波新的振興浪潮。 本文通過企業內部與網際網路兩個場景向大家講書爬蟲發揮了哪些重要作用。本文選自《蟲術——Python絕技》一書。
學習Python中有不明白推薦加入交流群
號:864573496 群裡有志同道合的小夥伴,互幫互助, 群裡有不錯的視訊學習教程和PDF!
在大資料架構中,資料收集與資料儲存佔據了極為重要的地位,可以說是大資料的核心基礎。而爬蟲技術在這兩大核心技術層次中佔有了很大的比例。為何有此一說?我們不妨通過一個實際應用場景來看看爬蟲到底發揮了哪些作用?
在瞭解爬蟲的作用之前,應該先了解其基本特性:
主動——爬蟲的重點在於“爬取”(Crawl),這是一種主動性的行為。換句話說,它是一個可以獨立執行且能按照一定規則運作的應用程式。
自動化——由於處理的資料可能很分散,資料的存留具有一定的時效性,所以它是一套無人值守的自動化程式。
企業內部爬蟲
在我接近20年的IT從業生涯中,企業管理系統是我參與過的專案或產品中佔比最大的。在這些專案與產品的開發過程中,我觀察到很多企業內部其實有非常多的資料處理場景可以用爬蟲技術進行處理,從而能以驚人的效率取代原有的人工化的操作。
以我近年來在電商企業內部所見為例,阿里巴巴(簡稱阿里)已顯現出它在電子商務一統全球的實力與地位,幾乎可以將電商與阿里之間劃一個等號。阿里為各個店鋪和商家提供了各種各樣優秀的運營工具。我們會理所當然地認為電商企業內部的資訊化管理程度一定很高,不是嗎?然而事實恰恰相反,我見過的多數中小型的電商企業甚至是三板掛牌企業內部的資訊化水平仍然非常落後,不少企業仍然依賴Excel這樣基於大量人力為主導的表格處理。那麼問題來了,為何阿里巴巴、京東這些電商平臺已經提供了大量優質運營工具,而電商企業的資訊化水平卻很低,還需要靠勞動密集型的方式進行運營呢?
首先,電商企業不會只在某一平臺上開店,通常都會在多個平臺同時開多個店鋪以拓寬市場的銷售渠道;其次,電商企業之間、電商與供貨商之間缺乏統一的資料交換標準,通常只依賴於一些技術陳舊的ERP來維持日常的運營。
電商企業通常只能通過某一平臺上提供的專用工具監測某些產品的價格波動和銷售情況,而無法全面、統一地瞭解他們所銷售的產品在各大平臺的具體表現如何。然而這樣的需求很明顯是迫切的,因為只有瞭解銷售資料的變化才能實時調節銷售的策略。我見過最多的做法就是企業安排一位專人從各大電商平臺中匯出執行的資料,然後合併到Excel中,再進行一番統計,手工做出各種統計報表作為分析依據,這種做法往往對某一個單品就得做一次!
其實,導致這種現象的原因有以下幾點:
(1)缺乏統一的資料來源——這是不可調和的,因為電商執行的資料來源本來就具有多樣性。
(2)結構化資料與非結構化資料並存——企業間最常見的資料互動格式是Excel,互動工具是微信和QQ。
(3)一個數據存在多種時間版本——QQ或者微信上的同一個檔案修改多了且重複傳會出現各種的 data.xlsx、data(1).xlsx…data(n).xlsx。
(4)資料結構可能存在隨意性——Excel檔案內很少會看見用英文命名的列,甚至相同作用的列很有可能會採用不同的中文名。
(5)資料查詢變得困難——在電商企業與供貨商之間要找出某個時段相同的資料副本可能是一件極為可怕的事件。
我們不妨來大膽地假設一下,如果將這些事情換成讓爬蟲去處理,那麼情況會變成什麼樣子呢?
(1)每天爬蟲在一個固定的時間到淘寶、京東或者其他電商平臺上自動下載商家當前的營業資料。
(2)完成爬取後將資料自動儲存到資料庫。
(3)從內網的某臺PC的指定資料夾中下載每天從其他經銷商發來的Excel檔案,整理後儲存到資料庫。
(4)發現某些商品庫存不足自動生成供貨商規定格式的訂貨單,通過電子郵件發出。
(5)決策者(運營經理/老闆)在手機或PC中通過資料視覺化工具檢視每天的資料統計結果,或者由爬蟲系統直接生成統計報表發到他們的郵箱中。
此時你可能會產生這樣的疑問:爬蟲不是單單爬取資料的嗎?為何還能處理這麼多的事情呢?這還是爬蟲的技術領域嗎?答案是肯定的,上面這個例子是由我經歷過的一個專案中的真實案例簡化而來的,爬蟲的這些行為融合了對爬取資料的後處理與Python自動化後得到的效果。其實爬蟲能做到的事情可以更多,具體的實現與企業內部的實際需求相關。而在網際網路中,它更像是一個具有“智慧”的機器人。
企業內網爬蟲只是網際網路爬蟲的一個小範圍的應用,是爬蟲技術與自動化技術的一種綜合性應用,而且自動化技術的佔比可能會比爬蟲技術手段更多一些。
網際網路爬蟲
與企業爬蟲相比,網際網路爬蟲就顯得更為單一與常見,在這個資料唾手可得的時代,在資料中用爬蟲淘金並不鮮見。如搜尋引擎本身就是“蟲術大師”,只要是它們想爬的網站,幾乎是沒有爬不穿的。App Store上最火的內容性App總是某些新聞類的聚合應用,大多數網站開發者都知道那只是一個聚合了各種新聞網站連結的綜合性平臺,它們的內容也是靠“放蟲”才可能在各大新聞門戶中獲取第一手的新聞資訊。更重要的是,這些新聞資訊都是“免費”的,任何一個使用者都可以輕易地從網際網路上獲取,這個使用者當然也可以包括“蟲子”。
網際網路中存在大量如新聞資訊一類的免費內容,或是政府、企業、第三方機構、團體甚至個人共享的各種資料。例如,我們可以輕易地到氣象局的網站上獲取近十年某個地區的降雨量資訊,或者從證券交易所獲取當天各支股票的價格走勢,又或者到微博上獲知當天最具有傳播性的某個事件的詳情。換句話說,只要有清晰的目標資料來源,只要你具有對資料來源具有訪問的許可權,那麼你也可以讓爬蟲為你代勞,一次性從資料來源上獲取所有你想要的資料。
要通過爬蟲順利地從網際網路中爬取資料,那麼就得了解這些資料的特質,然後採取針對性的手段才可能做到無往不利。一般來說,網際網路中可爬取的資料可分為以下幾種:
(1)一般性的網頁——符合W3C規範的網頁都可視為一種半結構化的內容,可以通過一些頁面元素分析工具從網頁中讀取指定資料,由於網頁開發的自由度極大,幾乎沒有哪個網站的結構是完全相同的。而且可變因素也很多,可能網頁讀取要通過許可權的審查,或者網頁由客戶端的JavaScript進行繪製才能呈現最終效果,甚至網頁可能來源於CDN,其內容未必是最新的,只是某個網路快取的副本,等等。不過不用擔心,當你完全掌握了蟲術,這一切對你將不再是阻擋。
(2)API資源——API資源是最適合爬取的資料來源(沒有之一),因為RESTful API都是結構化資料,會以XML或者JSON的形式進行呼叫或者返回,這些資料內容即使沒有API說明手冊一般也能讀懂。
(3)檔案資源——檔案資源屬於最麻煩的資料來源了,除非爬取的檔案是以結構化資料格式呈現的,否則作為自由文字,由於是非結構化的,我們需要對文字的內容進行一些後處理,要讓爬蟲“讀懂”這些文字內容,再判斷哪些內容是獲取的目標。
(4)媒體資源——如圖片和視訊等,其爬取的動作基本與檔案類似,只是由於圖片與視訊等資源一般來說都比較大,可能還需要對檔案的元資訊進行一些分析以判斷其是否具有爬取的價值,以避免讓爬蟲過多地消耗不必要的網路流量與爬取時間。
蟲術技術路線圖
爬蟲涉及的技術領域很多,運用的技術也非常龐雜,從基本的網路訪問到複雜的機器學習,可能會讓初入門徑者有望而卻步的想法。為了讓大家有一個全面的認識,我們特意將初級、中級、高階三個階段中所要學習與使用的技術歸納成下圖以作參考。

技術路線圖.png