
大數據時代,這項收集數據的技能不可少
大數據是未來的“新石油”?!度祟惡喪罚簭膭游锏缴系邸返淖髡哂韧郀枴ず绽f:大數據將是人類自由意志的終結,數據主義將取代以往的宗教和人文主義,成為未來的信仰。人人都在談大數據,談DT時代,我們剝去社會附加上的外衣,則回歸“數據”二字。
那如何獲取數據呢?
在運營公眾號這么長一段時間,經常有人問超模君:超模君,我需要什么的數據,該怎么處理,或者直接問超模君,能不能給我提供一些數據?
其實超模君內心是奔潰的。。。而一般我給出的建議如果沒有整理好的數據,可以嘗試做個爬蟲試試。而在獲取數據的道路上并不簡單,爬蟲可謂是“麻雀雖小,五臟俱全”,爬蟲雖然操作起來很簡單,用十幾行腳本語言就可以搞定,但其中可涉及到網絡通信,字符串處理,數據庫等,能使用到一種語言的幾乎所有組件。
一言不合就上代碼
我們先來看一個最簡單的最簡單的爬蟲,用python寫成,只需要三行。
import requests
url="http://www.cricode.com"
r=requests.get(url)
上面這三行爬蟲程序,就如下面這三行情詩一般,很干脆利落。
是好男人,
就應該在和女友吵架時,
抱著必輸的心態。
上面那個最簡單的爬蟲,不是一個完整的爬蟲,因為爬蟲通常需要以下3個步驟:
1)給定的種子URLs,爬蟲程序將所有種子URL頁面爬取下來
2)爬蟲程序解析爬取到的URL頁面中的鏈接,將這些鏈接放入待爬取URL集合里
3)重復1、2步,直到達到指定條件才終止爬取
因此,一個完整的爬蟲大概是這樣子的:
import requests #用來爬取網頁
from bs4 import BeautifulSoup #用來解析網頁
seds = ["http://www.hao123.com", #我們的種子
"http://www.csdn.net",
"http://www.cricode.com"]
sum = 0 #我們設定終止條件為:爬取到100000個頁面時,就不玩了
while sum < 10000 :
if sum < len(seds):
r = requests.get(seds[sum])
sum = sum + 1
do_save_action(r)
soup = BeautifulSoup(r.content)
urls = soup.find_all("href",.....) //解析網頁
for url in urls:
seds.append(url)
else:
break
上面那個完整的爬蟲,不足20行代碼,相信你能找出20個需要改進的地方來。因為它的缺點實在是太多了。下面列舉一下它的N個缺點:
1)我們的任務是爬取1萬個網頁,按上面這個程序,一個人在默默的爬取,假設爬起一個網頁3秒鐘,那么,爬一萬個網頁就要3萬秒鐘。MGD,我們可以考慮開啟多個線程去一起爬取,或者用分布式架構去并發地爬取網頁。
2)種子URL和后續解析到的URL都放在一個列表里,我們應該將這些待爬取的URL存放到一個新的更合理的數據結構里,例如隊列或者優先隊列。
3)對各個網站的URL,我們一視同仁,然而,我們應該是要區別對待的。應當考慮大站好站優先原則。
4)我們每次發起請求,都是根據URL來發起的,而在這個過程中會牽涉到DNS解析(將URL轉換成 IP 地址)。一個網站通常有數以萬計的URL,所以我們可以考慮將這些網站域名的 IP 地址進行緩存,避免每次都發起DNS請求,浪費時間。
5)解析到網頁中的URLs后,我們沒有做任何去重處理,全部放入了待爬取的列表中。事實上,可能有很多鏈接是重復的,我們做了很多無用功。
6)…..
那么,真正的問題來了,學挖掘機到底哪家強?
現在我們就來列出上面找出的幾個問題的解決方案。
1)如何做到并行爬取
我們可以有多重方法去實現并行。
多線程或者線程池方式,一個爬蟲程序內部開啟多個線程。同一臺機器開啟多個爬蟲程序,這樣,我們就有N多爬取線程在同時工作。能大大縮短時間。
此外,當我們要爬取的任務特別多時,一臺機器、一個網點明顯不夠,這時我們就要考慮分布式爬蟲了。常見的分布式架構有:主從(Master——Slave)架構、點對點(Peer to Peer)架構,混合架構等。
說到分布式架構,我們需要考慮的問題就有很多,比如我們需要分派任務,各個爬蟲之間需要通信合作,共同完成任務,不要重復爬取相同的網頁。分派任務時我們要做到公平公正,就需要考慮如何進行負載均衡。負載均衡,我們第一個想到的就是Hash,比如根據網站域名進行hash。
負載均衡分派完任務之后,并不意味著萬事大吉了,萬一哪臺機器崩潰了呢?原先指派給崩潰的那臺機器的任務應該再指派給哪臺機器?又或者哪天要增加幾臺機器,任務重新分配問題該如何解決?
用一致性Hash算法就是一個比較好的解決方案。
2)如何對待待抓取隊列
類似于操作系統如何調度進程的場景。
不同的網站,重要程度不同,因此,可以設計一個優先級隊列來存放待爬取的網頁鏈接。這樣一來,每次抓取時,重要的網頁都會被我們優先爬取。
另外,你也可以效仿操作系統的進程調度策略之多級反饋隊列調度算法。
3)進行DNS緩存
為了避免每次都發起DNS查詢,我們可以將DNS進行緩存。DNS緩存當然是設計一個hash表來存儲已有的域名及其 IP 。
4)進行網頁去重
說到網頁去重,應該都會想到垃圾郵件過濾。垃圾郵件過濾的一個經典的解決方案是Bloom Filter(布隆過濾器)。布隆過濾器原理簡單來說就是:建立一個大的位數組,然后用多個Hash函數對同一個url進行hash得到多個數字,然后將位數組中這些數字對應的位置為1。下次再來一個url時,同樣是用多個Hash函數進行hash,得到多個數字,我們只需要判斷位數組中這些數字對應的為是全為1,如果全為1,那么說明這個url已經出現過。如此,便完成了url去重的問題。不過,這種方法會有誤差,但是只要誤差在我們的接受范圍之內,就像是1萬個網頁,我們只爬取到了9999個,剩下那1個網頁,誰在乎呢!
5)數據存儲的問題
數據存儲同樣是一個很有技術含量的問題。用關系數據庫存取還是用NoSQL,或者是自己設計特定的文件格式進行存儲,都有很大工程可做。
6)如何完成進程間通信
分布式爬蟲,離不開進程間的通信。我們可以以規定的數據格式進行數據交互,去完成進程間的通信。
7)……
廢話說了那么多,真正的問題來了,問題不是學挖掘機到底哪家強?而是如何實現上面這些東西?。海?
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25