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