No 1 聊一聊資料獲取和爬蟲

2021-08-08 00:00:30 字數 1868 閱讀 1887

為什麼要把資料獲取、爬蟲放在一起來聊呢?

居士是想成為一名資料科學家的!資料科學家就要具備很多的技能,什麼統計學、資料探勘、資料倉儲、大資料計算、資料視覺化等等。

但是,首先我們要有資料,沒有資料我們玩什麼?想要玩資料,我們就要來聊一下資料獲取,資料獲取有很多途徑,爬蟲算是其中最自力更生的技能了,而實現爬蟲又和圖論的知識有很深的聯絡,因此在聊得時候還要順便聊一下圖論。

我們站在個人的角度看一下資料獲取,我們會有幾個比較簡單的資料獲取途徑:

公司提供的資料

買資料爬蟲

公司提供的資料 應該是資料從業者接觸最多的資料了,它的收集和處理我們後續專門來聊。 只是自己在做測試和寫部落格的時候有時候是不方便直接使用公司資料的,因此這裡暫時不提。

免費資料集在網上有很多,現在居士的網盤中還有幾百t的公開免費資料集。這部分資料的價值是很大的,只是在需要的時候能找到相應的資料可能會不太容易。

買資料就沒什麼好說了,一般站在個人角度,我們是不會考慮花錢的事情的。

我們主要來聊網路爬蟲。爬蟲是獲取資料靈活度極高的一種方式,我們基本上可以爬取網上所有我們能看到的網頁(當然,很多網頁難度很大),按照我們想要的格式爬取我們需要的資料。

最重要的一點,自己爬的資料,自己最了解!也容易有成就感。

首先要十分明確一點:爬蟲很簡單。

乙個最基本的爬取網頁的爬蟲只要五六行程式就能搞定,乙個完善一點包括廣度優先遍歷、頁面解析和已訪問網頁記錄的爬蟲也不過百行就能搞定。因此不需要對爬蟲有過多的畏懼感。

當然,爬蟲的水還是很深的,我們要考慮爬蟲的分布式化、防爬蟲等等一系列問題,但是,剛開始可以先不管那麼多,我們畢竟不是爬蟲工程師,等遇到這些問題再解決即可。

爬蟲是什麼?這個問題問的好!我們可以將問題稍微具體化一點:網路爬蟲是什麼?

我們不搬概念,大致解釋一下居士的理解:

爬蟲是一段**,它用於將網際網路上的網頁爬取下來。爬蟲會根據一定的規則,通過乙個網頁找到更多的網頁,這樣乙個個網頁爬過去,把它們的內容存在本地。

我們開始聊一聊爬蟲的設計和實現。爬蟲有幾個設計要點:遍歷演算法的選擇、頁面內容的解析和維護已訪問url的列表,請看下面的思維導圖。

圖的遍歷在爬蟲中的應用在此處就會有體現,我們在實現爬蟲是應該選廣度優先遍歷(bfs)還是深度優先遍歷(dfs)?

從理論上講,兩個演算法都能在大致相同的時間爬下指定範圍的內容。

但是我們在真正選擇的時候會更傾向於用廣度有限遍歷,為什麼? 大部分**的最主要內容應該是主頁,其次是主頁中展示的網頁,畢竟在規劃**時也會把最重要的內容最先展示給使用者。因此我們會優先使用bfs。

但是,真正在做工程的時候,還是要考慮dfs的,這和具體的實現場景有很大的關係,在這裡我們可以先簡單地認為bfs更適合爬蟲。

頁面解析主要分兩個部分:內容的解析和url的解析。

但是,這一塊會很繁瑣,每個**的頁面標籤設計都不一樣,大部分自己寫的爬蟲都需要來自己總結規則並實現。在python中我們可以用beautifulsoup來解析相應的內容,十分簡單,具體方法看後續的文章。

已訪問url列表的維護是十分重要的,如果不記錄已訪問頁面列表,會造成相當多的重複計算。

雜湊表的功能主要是兩個:1.判斷該url是否在表中,2.加入新的url。 基本的實現十分簡單,但是當有千台伺服器一起訪問這張雜湊表事就會有很大的效能瓶頸。 關於這個問題可以看《數學之美》

本文整體是在閒聊,先聊了一些資料獲取的東東,然後分享了一些爬蟲的大致設計思路,這裡沒有技術細節。

再接著可玩的東西就很多的,我們可以在這些關係資料的基礎上跑很多有意思的演算法,比如 pagerank 和 lpa ,也可以繼續爬更多的資料來做分析和挖掘,比如爬部落格的正文。

總之,你會發現,當你拿到資料之後,就可以做更多有意義的事情。

個人主頁:

聊一聊元資料

這個話題來自我的msn space。這是原文 元資料 metadata 這個詞現在到處氾濫。其實我對元資料充其量只能說有自己的理解而已,並不能確信這個理解是正確的。我認為,資料結構分為三個層次 uml可是四層哦 例項層 直接描述特異化的資料場景 元資料層 描述例項的結構的一組資料 元資料的元資料層 ...

聊一聊hive資料傾斜

info基本資訊表 user id name agegender 1henry16男 2jack17男 3anny18女 4candy19女 5kate20女 burke 21frank 22ellen 23ken 24mili 25.score成績表 user id subject id scor...

聊一聊資料結構

資料結構 2.棧和佇列 二 樹三 圖 線性結構是一種基本的資料結構,主要用於對客觀世界中具有單一前驅和後繼的資料關係進行描述。線性結構的特點是資料元素之間呈現一種線性關係,即元素 乙個接乙個排列 線性表常採用順序儲存和鏈式儲存,主要的操作是 插入 刪除 查詢 線性表的順序儲存是指用一組位址連續的儲存...