App下載

python爬蟲有什么實(shí)際作用

猿友 2021-01-29 14:01:26 瀏覽數(shù) (5228)
反饋

小編說:網(wǎng)絡(luò)爬蟲是一種伴隨著互聯(lián)網(wǎng)誕生與演化的"古老”的網(wǎng)絡(luò)技術(shù),隨著互聯(lián)網(wǎng)進(jìn)入大數(shù)據(jù)時(shí)代,爬蟲技術(shù)迎來了一波新的振興浪潮。 本文通過企業(yè)內(nèi)部與互聯(lián)網(wǎng)兩個(gè)場(chǎng)景向大家講書爬蟲發(fā)揮了哪些重要作用。本文選自《蟲術(shù)——Python絕技》一書。

在大數(shù)據(jù)架構(gòu)中,數(shù)據(jù)收集與數(shù)據(jù)存儲(chǔ)占據(jù)了極為重要的地位,可以說是大數(shù)據(jù)的核心基礎(chǔ)。而爬蟲技術(shù)在這兩大核心技術(shù)層次中占有了很大的比例。為何有此一說?我們不妨通過一個(gè)實(shí)際應(yīng)用場(chǎng)景來看看爬蟲到底發(fā)揮了哪些作用?

主動(dòng)——爬蟲的重點(diǎn)在于"爬取”(Crawl),這是一種主動(dòng)性的行為。換句話說,它是一個(gè)可以獨(dú)立運(yùn)行且能按照一定規(guī)則運(yùn)作的應(yīng)用程序。

自動(dòng)化——由于處理的數(shù)據(jù)可能很分散,數(shù)據(jù)的存留具有一定的時(shí)效性,所以它是一套無人值守的自動(dòng)化程序。

在我接近20年的IT從業(yè)生涯中,企業(yè)管理系統(tǒng)是我參與過的項(xiàng)目或產(chǎn)品中占比最大的。在這些項(xiàng)目與產(chǎn)品的開發(fā)過程中,我觀察到很多企業(yè)內(nèi)部其實(shí)有非常多的數(shù)據(jù)處理場(chǎng)景可以用爬蟲技術(shù)進(jìn)行處理,從而能以驚人的效率取代原有的人工化的操作。

以我近年來在電商企業(yè)內(nèi)部所見為例,阿里巴巴(簡(jiǎn)稱阿里)已顯現(xiàn)出它在電子商務(wù)一統(tǒng)全球的實(shí)力與地位,幾乎可以將電商與阿里之間劃一個(gè)等號(hào)。阿里為各個(gè)店鋪和商家提供了各種各樣優(yōu)秀的運(yùn)營(yíng)工具。我們會(huì)理所當(dāng)然地認(rèn)為電商企業(yè)內(nèi)部的信息化管理程度一定很高,不是嗎?然而事實(shí)恰恰相反,我見過的多數(shù)中小型的電商企業(yè)甚至是三板掛牌企業(yè)內(nèi)部的信息化水平仍然非常落后,不少企業(yè)仍然依賴Excel這樣基于大量人力為主導(dǎo)的表格處理。那么問題來了,為何阿里巴巴、京東這些電商平臺(tái)已經(jīng)提供了大量?jī)?yōu)質(zhì)運(yùn)營(yíng)工具,而電商企業(yè)的信息化水平卻很低,還需要靠勞動(dòng)密集型的方式進(jìn)行運(yùn)營(yíng)呢?

首先,電商企業(yè)不會(huì)只在某一平臺(tái)上開店,通常都會(huì)在多個(gè)平臺(tái)同時(shí)開多個(gè)店鋪以拓寬市場(chǎng)的銷售渠道;其次,電商企業(yè)之間、電商與供貨商之間缺乏統(tǒng)一的數(shù)據(jù)交換標(biāo)準(zhǔn),通常只依賴于一些技術(shù)陳舊的 ERP 來維持日常的運(yùn)營(yíng)。

電商企業(yè)通常只能通過某一平臺(tái)上提供的專用工具監(jiān)測(cè)某些產(chǎn)品的價(jià)格波動(dòng)和銷售情況,而無法全面、統(tǒng)一地了解他們所銷售的產(chǎn)品在各大平臺(tái)的具體表現(xiàn)如何。然而這樣的需求很明顯是迫切的,因?yàn)橹挥辛私怃N售數(shù)據(jù)的變化才能實(shí)時(shí)調(diào)節(jié)銷售的策略。我見過最多的做法就是企業(yè)安排一位專人從各大電商平臺(tái)中導(dǎo)出運(yùn)行的數(shù)據(jù),然后合并到 Excel 中,再進(jìn)行一番統(tǒng)計(jì),手工做出各種統(tǒng)計(jì)報(bào)表作為分析依據(jù),這種做法往往對(duì)某一個(gè)單品就得做一次!

(1)缺乏統(tǒng)一的數(shù)據(jù)來源——這是不可調(diào)和的,因?yàn)殡娚踢\(yùn)行的數(shù)據(jù)源本來就具有多樣性。

(2)結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)并存——企業(yè)間最常見的數(shù)據(jù)交互格式是Excel,交互工具是微信和QQ。

(3)一個(gè)數(shù)據(jù)存在多種時(shí)間版本——QQ或者微信上的同一個(gè)文件修改多了且重復(fù)傳會(huì)出現(xiàn)各種的 data.xlsx、data(1).xlsx…data(n).xlsx。

(4)數(shù)據(jù)結(jié)構(gòu)可能存在隨意性——Excel文件內(nèi)很少會(huì)看見用英文命名的列,甚至相同作用的列很有可能會(huì)采用不同的中文名。

(5)數(shù)據(jù)查找變得困難——在電商企業(yè)與供貨商之間要找出某個(gè)時(shí)段相同的數(shù)據(jù)副本可能是一件極為可怕的事件。

我們不妨來大膽地假設(shè)一下,如果將這些事情換成讓爬蟲去處理,那么情況會(huì)變成什么樣子呢?

(1)每天爬蟲在一個(gè)固定的時(shí)間到淘寶、京東或者其他電商平臺(tái)上自動(dòng)下載商家當(dāng)前的營(yíng)業(yè)數(shù)據(jù)。

(3)從內(nèi)網(wǎng)的某臺(tái)PC的指定文件夾中下載每天從其他經(jīng)銷商發(fā)來的Excel文件,整理后保存到數(shù)據(jù)庫。

(4)發(fā)現(xiàn)某些商品庫存不足自動(dòng)生成供貨商規(guī)定格式的訂貨單,通過電子郵件發(fā)出。

(5)決策者(運(yùn)營(yíng)經(jīng)理/老板)在手機(jī)或 PC 中通過數(shù)據(jù)可視化工具查看每天的數(shù)據(jù)統(tǒng)計(jì)結(jié)果,或者由爬蟲系統(tǒng)直接生成統(tǒng)計(jì)報(bào)表發(fā)到他們的郵箱中。

此時(shí)你可能會(huì)產(chǎn)生這樣的疑問:爬蟲不是單單爬取數(shù)據(jù)的嗎?為何還能處理這么多的事情呢?這還是爬蟲的技術(shù)領(lǐng)域嗎?答案是肯定的,上面這個(gè)例子是由我經(jīng)歷過的一個(gè)項(xiàng)目中的真實(shí)案例簡(jiǎn)化而來的,爬蟲的這些行為融合了對(duì)爬取數(shù)據(jù)的后處理與Python自動(dòng)化后得到的效果。其實(shí)爬蟲能做到的事情可以更多,具體的實(shí)現(xiàn)與企業(yè)內(nèi)部的實(shí)際需求相關(guān)。而在互聯(lián)網(wǎng)中,它更像是一個(gè)具有"智能”的機(jī)器人。

企業(yè)內(nèi)網(wǎng)爬蟲只是互聯(lián)網(wǎng)爬蟲的一個(gè)小范圍的應(yīng)用,是爬蟲技術(shù)與自動(dòng)化技術(shù)的一種綜合性應(yīng)用,而且自動(dòng)化技術(shù)的占比可能會(huì)比爬蟲技術(shù)手段更多一些。


與企業(yè)爬蟲相比,互聯(lián)網(wǎng)爬蟲就顯得更為單一與常見,在這個(gè)數(shù)據(jù)唾手可得的時(shí)代,在數(shù)據(jù)中用爬蟲淘金并不鮮見。如搜索引擎本身就是"蟲術(shù)大師”,只要是它們想爬的網(wǎng)站,幾乎是沒有爬不穿的。App Store 上最火的內(nèi)容性 App 總是某些新聞?lì)惖木酆蠎?yīng)用,大多數(shù)網(wǎng)站開發(fā)者都知道那只是一個(gè)聚合了各種新聞網(wǎng)站鏈接的綜合性平臺(tái),它們的內(nèi)容也是靠"放蟲”才可能在各大新聞門戶中獲取第一手的新聞信息。更重要的是,這些新聞信息都是"免費(fèi)”的,任何一個(gè)用戶都可以輕易地從互聯(lián)網(wǎng)上獲取,這個(gè)用戶當(dāng)然也可以包括"蟲子”。

互聯(lián)網(wǎng)中存在大量如新聞資訊一類的免費(fèi)內(nèi)容,或是政府、企業(yè)、第三方機(jī)構(gòu)、團(tuán)體甚至個(gè)人共享的各種數(shù)據(jù)。例如,我們可以輕易地到氣象局的網(wǎng)站上獲取近十年某個(gè)地區(qū)的降雨量信息,或者從證券交易所獲取當(dāng)天各支股票的價(jià)格走勢(shì),又或者到微博上獲知當(dāng)天最具有傳播性的某個(gè)事件的詳情。換句話說,只要有清晰的目標(biāo)數(shù)據(jù)源,只要你具有對(duì)數(shù)據(jù)源具有訪問的權(quán)限,那么你也可以讓爬蟲為你代勞,一次性從數(shù)據(jù)源上獲取所有你想要的數(shù)據(jù)。


要通過爬蟲順利地從互聯(lián)網(wǎng)中爬取數(shù)據(jù),那么就得了解這些數(shù)據(jù)的特質(zhì),然后采取針對(duì)性的手段才可能做到無往不利。一般來說,互聯(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ā)的自由度極大,幾乎沒有哪個(gè)網(wǎng)站的結(jié)構(gòu)是完全相同的。而且可變因素也很多,可能網(wǎng)頁讀取要通過權(quán)限的審查,或者網(wǎng)頁由客戶端的JavaScript進(jìn)行繪制才能呈現(xiàn)最終效果,甚至網(wǎng)頁可能來源于CDN,其內(nèi)容未必是最新的,只是某個(gè)網(wǎng)絡(luò)緩存的副本,等等。不過不用擔(dān)心,當(dāng)你完全掌握了蟲術(shù),這一切對(duì)你將不再是阻擋。

(2)API資源——API資源是最適合爬取的數(shù)據(jù)源(沒有之一),因?yàn)?RESTful API 都是結(jié)構(gòu)化數(shù)據(jù),會(huì)以 XML 或者 JSON 的形式進(jìn)行調(diào)用或者返回,這些數(shù)據(jù)內(nèi)容即使沒有API說明手冊(cè)一般也能讀懂。

(3)文件資源——文件資源屬于最麻煩的數(shù)據(jù)源了,除非爬取的文件是以結(jié)構(gòu)化數(shù)據(jù)格式呈現(xiàn)的,否則作為自由文本,由于是非結(jié)構(gòu)化的,我們需要對(duì)文本的內(nèi)容進(jìn)行一些后處理,要讓爬蟲"讀懂”這些文本內(nèi)容,再判斷哪些內(nèi)容是獲取的目標(biāo)。

(4)媒體資源——如圖片和視頻等,其爬取的動(dòng)作基本與文件類似,只是由于圖片與視頻等資源一般來說都比較大,可能還需要對(duì)文件的元信息進(jìn)行一些分析以判斷其是否具有爬取的價(jià)值,以避免讓爬蟲過多地消耗不必要的網(wǎng)絡(luò)流量與爬取時(shí)間。

爬蟲涉及的技術(shù)領(lǐng)域很多,運(yùn)用的技術(shù)也非常龐雜,從基本的網(wǎng)絡(luò)訪問到復(fù)雜的機(jī)器學(xué)習(xí),可能會(huì)讓初入門徑者有望而卻步的想法。為了讓大家有一個(gè)全面的認(rèn)識(shí),我們特意將初級(jí)、中級(jí)、高級(jí)三個(gè)階段中所要學(xué)習(xí)與使用的技術(shù)歸納成下圖以作參考。

互聯(lián)網(wǎng)最激烈的對(duì)抗戰(zhàn)場(chǎng),除了安全專家與黑客之間,大概就是爬蟲與反爬蟲領(lǐng)域了。據(jù)統(tǒng)計(jì),爬蟲流量早已超過了人類真實(shí)訪問請(qǐng)求流量?;ヂ?lián)網(wǎng)充斥著形形色色的爬蟲,云上、傳統(tǒng)行業(yè)都有不同規(guī)模的用戶被爬蟲愛好者盯上,這些爬蟲從哪里來?爬取了誰的數(shù)據(jù)?數(shù)據(jù)將被用于何處? 

0 人點(diǎn)贊