資料分析就是像是做飯一樣,正所謂“巧婦難為無米之炊”。資料分析的前提就是資料的擷取,隻有把食材準備好,經過我們的加工,可以呈現出一道色香味俱全的美味菜肴。是以資料擷取是整個資料分析的中流砥柱,資料品質的高低直接導緻最終的結果是否準确。
資料擷取如果說資料擷取就是準備食材,那麼食材的來源大概有兩種方式,一種是去菜市場購買,這種方式的食材,由商家給你準備好了,拿回來洗一洗或者不用洗就可以直接用,那麼菜販子就是你的資料供應商。好是好,缺點是你得花錢買啊。
還有一種方式,你自己去田野裡面去挖野菜,當然這些菜是都沒有屬主的,也就說你不能别人的菜地裡面去“偷”啊,你隻能去挖一些沒有版權的内容。這種方式呢,就是所謂的網絡爬蟲。優點是免費,網際網路的公開的無版權的資料(或者有版權可以免費商用等等)都可以适應,缺點就是你需要自己去尋找,自己去整理。
本地資料
本地資料,通俗的來講,就是目前我們手裡有的資料,拿來就可以用的,或者說購買外部資料到内部系統中使用都可以作為本地資料使用。
不過,我們聽到最多的關于本地資料的名詞應該是本地資料庫,這個就很容易了解,它不僅能給應用提供最快的響應速度,而且也可以給我們現成的資料來做一些資料分析工作。
當然作為本地資料,不僅僅是指資料庫的資料形式,也可以是Excel、Word檔案,也可以是txt、csv格式的檔案,都可以作為本地資料來使用。
在資料分析中,如果有本地資料供我們使用,那就可以直接進行下一步,檢視資料品質怎麼樣,需不需要清洗,把資料做到可用的規範化。
本地資料通常存在工作場景中,公司生産過程中産生的一些資訊,我們可以把這些作為原材料,進行一系列的資料分析,得出一些可用的結論,以此來更好的調整政策。不過作為初學者來說,很難找到一些合适的本地資料供學習使用,但是沒有關系,在網際網路時代最不缺的就是資訊,我們完全可以從網絡中找到需要的一些資料。
網絡資料
網絡資料代指的是那些我們可以通過網際網路可以浏覽到的資料,比如說,新聞資訊、招聘求職資訊、出租租房資訊等等,都是網絡資料。據IDC釋出《資料時代2025》的報告顯示,在2018年每天的可以産生92EB(1EB=1024PB,1PB=2014TB)的資訊,預計2025年每天會産生491EB的資訊,我們正在處于的是一個資訊爆炸的時代。每個人都處在千億的資訊流中,每天各種App的資訊盡力的想占據着我們的時間,我們在這繁雜的資訊中尋找着一點我們可用的、喜歡的資訊。
早在10年前,就有研究表明,每人每天接收到的資訊量相當于174份報紙,在今天資訊更加指數型增長,我們更是無法去檢視每一條資訊,隻能依靠于特定的方式擷取自己想要的資訊。
不過對于我們學習資料分析來說,這就是天然的寶庫。比如說,我們想知道今年的找工作形勢怎麼樣,我們可以把招聘網站上的公司釋出的資料分析崗位的資訊。假設,我們想知道上海目前資料分析師的崗位大概的薪資範圍是多少,學曆要求是怎麼樣,這樣可以給求職者一個更好的參考,在與HR談論薪資時候,不至于太離譜,導緻最後拿不到滿意的薪資。
那麼這個問題來了,招聘網站上有1000+崗位資訊,我們要每個都複制粘貼到excel,然後在計算分析可參考的結果,估計是一個下下策,那麼有什麼好的方式嗎?當然可以用Python編寫一個網絡爬蟲,将資訊下載下傳到本地,代替你重複性的複制粘貼的勞動。下一小節,我們将繼續了解網絡爬蟲的使用。
初識爬蟲
網絡爬蟲(又稱為網頁蜘蛛),是一種按照一定的規則,自動地抓取網際網路資訊的程式或者腳本。
爬蟲最重要的特點就是有一定的規則,這個規則就是網頁中的特定位置的資訊,比如說,一個招聘資訊網頁中崗位名稱、崗位薪資等,都是在特定位置,爬蟲可以自動抓取每一頁中特定位置的資訊。
每個網站中的HTML結構是不同的,而每一套的爬蟲程式隻能按照特定的内容擷取資訊,假設你寫的是采集A招聘網站上爬蟲,在B招聘網站上是不能用的。
網絡爬蟲按照系統結構和實作技術,大緻可以分為以下幾種類型:通用網絡爬蟲(General Purpose Web Crawler)、聚焦網絡爬蟲(Focused Web Crawler)、增量式網絡爬蟲(Incremental Web Crawler)、深層網絡爬蟲(Deep Web Crawler)。實際上的爬蟲通常是幾種爬蟲技術相結合實作的。我們多數實作的都是聚焦網絡爬蟲和深層網絡爬蟲。
1.通用網絡爬蟲
通用網絡爬蟲又稱全網爬蟲(Scalable Web Crawler),此類爬蟲通過會一些種子連結擴充到整個 Web,主要為門戶站點搜尋引擎和大型網絡服務提供商采集資料。比如常用的搜尋引擎,百度和谷歌,就是此類别爬蟲,你能搜到很多其他的網站的資訊,就是通過全網爬蟲将資訊采內建快照,供使用者搜尋使用。由于一些商業保護和競争,這樣的爬蟲核心技術很少有做到開源。
這類網絡爬蟲的爬取範圍和數量巨大,對于爬取速度和存儲空間要求較高,但是爬取頁面的順序要求相對較低,需要同時爬取的頁面多,通常采用并行、叢集分布的工作方式。
2.聚焦網絡爬蟲
聚焦網絡爬蟲(Focused Crawler),又稱主題網絡爬蟲(Topical Crawler),是指選擇性地爬取那些與預先定義好的主題相關頁面的網絡爬蟲。和通用網絡爬蟲相比,聚焦爬蟲隻需要爬取特定的頁面,極大程度上節省硬體和網絡資源,儲存的頁面也會相對的少很多,爬取速度也會快很多。
我們經常用的寫到的爬蟲就是這類爬蟲,聚焦于特定的網站特定的資訊,将這些資訊采集到本地使用。
3.增量式網絡爬蟲
增量式網絡爬蟲(Incremental Web Crawler)是指隻定向爬取新增頁面,對于已經下載下傳過的頁面不進行爬取,故名為增量爬蟲。這類爬蟲工作任務少,但是需要有一定的識别難度,先判斷目前頁面是否已經爬取過。
4.深層網絡爬蟲
在我們日常通路的網頁中能直接通過連結打開即可看到的内容的頁面屬于表層網頁(Surface Web),而需要登入或者需要添加表單送出後才可以看到的内容的頁面屬于深層網頁(Deep Web)。深層網絡爬蟲(Deep Web Crawler)是指的可爬取到由動态資料生成的頁面。是以它的爬蟲結構會相對的更複雜一些,因為涉及到相關的表單送出和資料驗證。
在日常的資料采集的爬蟲的使用中,我們也會經常使用一些深層網絡爬蟲,其實就是送出一些帶參數的post請求來擷取的傳回資料。
爬蟲合法性
在資料時代,資料隐私也越來越重要的,有時候偶爾也會在新聞上看見說XX公司程式員因非法爬取某些使用者的隐私資訊構成了侵犯公民隐私罪,那麼使用爬蟲是否合法呢?
通常在網站的根目錄下都存放robots協定,也叫robots.txt,可以在直接通路通路的根目錄/robots.txt,這裡面的内容告訴網絡搜尋引擎,網站中的哪些内容是可以擷取的,哪些内容是不可以擷取的。比如知乎的robots協定就是https://www.zhihu.com/robots.txt。我們看下其中的一段是這樣寫的,如圖所示。
其中User-agent告訴伺服器是通路者是通過什麼工具來請求的,如果是爬蟲請求,一般會拒絕,如果是使用者浏覽器,就會應答。而User-agent是百度爬蟲的時候,伺服器是不允許通路Disallow列舉的路徑下的連結,Allow表示可通路該路徑下的連結。
但是robots協定并不是一個規範,而隻是約定俗成的,是以并不能保證網站的隐私。
多數網站中都有在請求頭上在我們自行編寫的爬蟲程式中,通常的User-agent都設定為使用者浏覽器,這個後面的章節中詳細的講解。
我們個人使用者、開發者編寫的爬蟲程式并非搜尋引擎爬蟲,那麼到底應該是遵循什麼規則呢?
1.禁止使用爬蟲非法擷取公民個人隐私,爬取隐私資訊可能構成侵犯個人隐私罪。正常網站都會對使用者隐私保護很嚴格。
2.爬蟲程式幹擾網站或者系統的正常運作,可能構成破壞計算機系統罪。不過多數網站都有限流措施,同一IP短時内發送請求數達到一定的門檻值,将不再對此IP的請求做回應。
3.爬蟲程式非法爬取付費資訊以出售獲利,可能構成侵犯知識産權罪。
作為開發者來說,我們應該合理使用技術,而不是使用技術做違法行為。在我們本書中所使用的爬蟲程式都是供學習使用,是正常合理可以使用的爬蟲程式。