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