為什麼網上Python爬蟲教程這麼多,但是做爬蟲的這麼少呢?爬蟲發展又該是如何呢?
很多人學習Python進階可能都寫過幾個爬蟲,但是最終做爬蟲的人卻比較少呢?是因為真的像別人說的那樣,爬蟲真的沒「技術含量」,還是爬蟲隨著反爬的不斷提升,做爬蟲的代價越來越高難以維持成本?還希望能談一談爬蟲的發展該是怎樣的?可能做到雙贏嗎?請指教
因為你看到網上的爬蟲教程,即使教了也就教個怎麼用Python模擬請求和搜索DOM,撐死了講一下怎麼用Scrapy,這個最多也只能算是真正做爬蟲的基礎問題。
實際上做爬蟲,關鍵問題永遠不是怎麼去模擬個請求這件事。
往底層看,大規模的高效率的數據爬取需要分散式系統的支撐,任務分派,分散式存儲,這些才是問題關鍵,上規模以後再來Scrapy那套,比起在企業已有的中間件和分散式系統上做擴展而言既沒效率也不好維護;往特殊爬取方向看,重點在於對抗反爬蟲,這個方向上對HTTP越了解越有優勢,特別重前端是現在的普遍趨勢,解析DOM還不如分析JS有用,而對於達到一定計算規模的爬取而言,分析JS還不如模擬瀏覽器實在,更何況說不準還要爬websocket,擴展算力對比擴展人力,前者成本大多數時候都更低,何況特殊爬取本也難有太大規模;往應用層面看,數據的提取、清洗、分析和應用才是重點。
若只是模擬個請求,然後提取一下DOM這種需求,甚至都不需要專門找個程序員,找個人拖幾下滑鼠就能制定規劃的軟體都有一大把了。
所以說數據的爬取,無論往哪個方向看,都不是工作重點。做前端的讓他寫個爬取,沒問題;做後端的來,人家做測試用例都沒少做過,自然是也行;做數據的多少自己都抓過數據,不欠那麼點功夫。在這種情況下,只會用Python模擬請求,這樣的崗位說難聽點叫做偽崗位,自然是沒辦法得到一個理想的待遇,就算靠著寫爬蟲吃飯,大體上也吃的不太好。
所以說,『做爬蟲』這樣的崗位,最好的出路其實是開課教別人做爬蟲。為什麼明明爬蟲沒什麼用,但是這麼多人教爬蟲呢?
很明顯,那些教爬蟲的人,自己也沒用過Python寫過什麼正經的project,講不了tensorflow和pytorch,也講不了什麼django和flask,甚至連Leetcode都沒刷過,於是在自己的知識庫里搜颳了一遍,最後發現只能講講爬蟲了
別把爬蟲當成你的唯一技能,也別python當成你的唯一工具
曾經靠爬蟲入門Python 的來回答一下。
寫爬蟲簡單,容易得到正反饋,在命令行運行效果酷炫,確實適合入門。但爬蟲有幾個很本質的問題,這些問題基本上無解,也就造成爬蟲入門教程多,但做爬蟲的少。
- 不存在普適性的爬蟲。不同網站有不同的架構,A網站的爬蟲不能夠直接套到B網站上,反之亦然。更何況就算是同一個網站,也會經歷改版迭代,架構一變,之前的爬蟲很有可能就失效了。想要爬蟲持續有效,必須投入時間精力去維護,這又更加造成普適性的缺失。我個人倒是碰到過兩年前寫的爬蟲還能用的情況,但想必那是極少數;
- 相比爬蟲,數據更值錢。許多答主也都提到了,為什麼會有data vendor 存在?因為乾淨有效的數據少。清理數據是一件繁瑣的事,搜集數據就更加如此。Bloomberg 也是靠數據發的家(記憶不準確),至於寫爬蟲相較而言就是一件很次要的事了,畢竟VBA 也能從Bloomberg 里『爬』數據,除了慢(手動尷尬;
- 相比數據,insights 最值錢。這裡的insights 比較難準確地翻譯成中文,可能用 洞見 會比較好?大多數數據,有錢就能買到。這意味著大多數公司可以擁有的數據集是一致的(尤其是金融公司)。那麼所有人都在同一起跑線上,為什麼有人跑的快,有人跑的慢呢?最重要的區別就是對數據的解讀,也就是所謂的洞見。同樣一份國家統計數據,有人只能看到中國有多少人,有人卻能判斷出下一個投資機會出現在哪裡,這是最為難得的能力,即所謂的核心競爭力。至於爬蟲,交給實習生寫寫就好啦。
綜上,爬爬小黃圖娛樂一下當然是好的,但請明白這不該是你追逐的目標。你的目標,應該是製造小黃圖(劃掉),如果你成功了記得發我一份。
爬蟲教程多,是因為爬蟲這東西比較簡單,給入門的同學食用比較有助於培養信心。很多人自己學點爬蟲,也樂於分享這些技能,畢竟寫個爬蟲也花不了太長時間,拿出來分享一下收穫幾個點贊、幾個感謝也算是有些收穫。
但這並不說明爬蟲沒有技術含量,初級爬蟲人人能寫,高階的就未必了。別的不說,各種千奇百怪的反爬策略你見過多少了?分散式會寫嗎?性能能優化到什麼水平?
不過,如果你是初學者,我並不建議你把爬蟲作為自己的主要方向,因為職位需求相對較少。
拉勾上搜索Python:
拉勾上搜索爬蟲(還包括其他語言爬蟲崗位哦):
作為初學者,不要去擠獨木橋。
assert 爬蟲 == 輔助
我能想到的爬蟲的發展路線有這麼兩個:
1)研究數據爬取下來怎麼處理,有什麼用。也就是搞數據分析、數據挖掘、推薦系統。
2)研究驗證碼的繞過,移動端逆向,網站頁面或者移動端的漏洞。也就是安全。
一般來說玩爬蟲的人很難想到(1),但是開發爬蟲或多或少要用到(2)。
因為真正的、專業的爬蟲,是跑在搜索引擎的數據中心裡,直接讀緩存的,跟這些玩具教程寫的完全不同。python在這裡也沒法用。
我以前也不知道的,直到我被指派去做微軟自己的knowledge graph,就是可以直接在bing上找湯姆克魯斯有多少個老婆的那個功能。因為爬蟲的難點,不在於爬蟲。
如果是爬取,比較簡單的網頁。
分分鐘上手,根本都不需要會python。
現在成熟的工具多的是。
點幾下就搞定了。
但是吧,真實工作中。
你會遇到很多和爬蟲技術不相關。
但是,又不得不解決的問題。
比如說驗證碼識別。
這個東西,明顯屬於機器學習範疇。
但是你不搞定,數據就是爬取不到。
你說找打碼平台吧,成本刷的一下就上去了。
所以,現在你應該能夠理解其中的矛盾。
和爬蟲的難點,不在於爬蟲。
這句話了吧。
總的說來,爬蟲的最高進階就是。
所見即所得,有了這本事。
工資杠杠的。
入門容易,做著不容易,心裡苦,不想多說
因為python 爬蟲就是偽需求,崗位還不如web開發。
啥語言都能實現發個請求拉東西回來解析,都用python搞是因為其他語言沒python那麼友好。
到工作就不同了,繞驗證碼登陸什麼的是第一步,後面分散式,數據分析,大數據,搜索,之類的都跟爬蟲沒半點關係。
我不知道至今還有多少人認為,學python就能找到一份人工智慧工作………………………
勸大家爬蟲可以玩,抓抓知乎小姐姐就當練手行了,真正找工作搞搞web開發,搞得好可能還能去知乎豆瓣寫寫CRUD。
(那為什麼不搞Nodejs呢?搞得好可以去阿里騰訊哦~~~~~爬蟲都是一些小公司乾的事情,大公司需要爬?有錢就買過來,買不過來就和別人合作拿數據!簡單的爬蟲確實很簡單,但是如果想寫出來一個穩定可用又方便的可不簡單!
其次,大部分學習爬蟲也就去爬幾篇文章,爬點妹子圖,純屬娛樂而已,又不指望靠這個掙錢吃飯!
為什麼教程多?
因為爬蟲門檻低、好上手、可以及時獲得正面反饋,初學者更容易繼續學下去。
為什麼工作少?
因為業界對爬蟲的需求少唄
爬蟲依靠於別人的網站兒存在,人家隨時萬一給網站換了風格,你的爬蟲立即就得跟著改,否則立即就失效
哪家大型的公司能忍這樣啊...
首先說說爬蟲的本質:下載數據
但是重要的是數據本身,而不是如何去下載數據
這個下載的過程方式,說實在的任何一個崗位都可以去做:
公司伺服器維護,但又有一些數據必須處理,
怎麼辦呢?找公司的員工,每人滑鼠點兩下,幾百份數據就來了
所以,爬蟲只是一個需求最最最前期的準備工作
這項工作也沒有很大的難度,在有較完善的框架下
甚至可以花2000元一個月隨便找一個實習生來寫爬蟲
不就是Dom樹解析么?有點基礎的都可以寫
別笑,我活生生幹了兩個月這種事...
那麼,專門的爬蟲崗較少也就可以理解了
我個人比較推薦通過學習爬蟲來入門Python
簡單,又有成就感
網上教程多,是因為入門簡單,容易獲得成就感,容易忽悠小白
爬蟲就是因為太有技術含量,所以會的人少,可能看起來做的人就少了
爬蟲遠比我們想的複雜
大多數人會的,只是造一顆螺絲釘,而整個爬蟲系統,就好比造火箭
大多數人,只掌握了入門級的水品,也就是最多能造個螺絲釘,造不出火箭
為什麼我說爬蟲遠比我們想的複雜呢?
爬蟲絕不是表面的 用requests、urllib,發個http請求那麼簡單
就如同 樓上的幾位回答者所說,如果只是發個http請求,根本用不著專門來學,隨便找個火車頭之類的工具,拖幾下滑鼠就搞定了
實際情況中,你要抓人家的數據, 會有很多門檻:
1.人家檢測出你是爬蟲,拉黑你IP (人家究竟是通過你的ua、行為特則 還是別的檢測出你是爬蟲的?你怎麼規避?)
2.人家給你返回臟數據,你怎麼辨認?
3.對方被你爬死,你怎麼設計調度規則?
4.要求你一天爬完10000w數據,你一台機器帶寬有限,你如何用分散式的方式來提高效率?
5.數據爬回來,要不要清洗?對方的臟數據會不會把原有的數據弄髒?
6.對方的部分數據沒有更新,這些未更新的你也要重新下載嗎?怎麼識別?怎麼優化你的規則?
7.數據太多,一個資料庫放不下,要不要分庫?
8.對方數據是JavaScript渲染,那你怎麼抓?要不要上PhantomJS?
9.對方返回的數據是加密的,你怎麼解密?
10.對方有驗證碼,你怎麼破解?
11.對方有個APP,你怎麼去得到人家的數據介面?
12.數據爬回來,你怎麼展示?怎麼可視化?怎麼利用?怎麼發揮價值?
13. 等等 ......
你看,一個強大的爬蟲,涉及很多學科的知識,是一門很大的學問
你要:
- 學http協議,知道哪個協議可以幫你省帶寬和時間
- 學資料庫,不然咋存數據,咋優化?資料庫分散式也要了解一點吧?
- 學演算法,基本的調度演算法,爬蟲調度也要了解吧?
- 學分散式、學redis,分散式總要懂一點,不然爬蟲怎麼協作呢?
- 學JavaScript,不然你怎麼看懂人家的數據是怎麼處理的,不然你怎麼反向解析?
- 基本的解密破解知識要懂吧?
- 驗證碼破解要懂吧?機器學習要懂吧?現在破解驗證碼都上機器學習了!
- ios開發要學吧?安卓開發也要學吧?不然怎麼反編譯人家的app去拿人家隱藏的介面加密演算法?
- 等等 ......
你看,這設計多少知識了,每一個知識點,基本都是一個學科,都不是幾本書能解決的
一個人,想精通這些,是十分困難的,所以一般是團伙協作作案
你負責端茶遞水、我負責解密他的介面、另外的同事負責寫代碼,搞資料庫,破解驗證碼 等等
你問一個人能做出這麼強大的東西嗎?
可以,在有一定知識儲備的情況下,用人家的輪子,是完全可以搭建起來的
所以,網上的爬蟲教程,無法把這些系統的講給你聽,就好比你想學賺錢,誰又能給你一個系統的教程呢?
你想上班賺錢,還是想賣豆腐賺錢?
賣什麼豆腐?
什麼價格?
店鋪開哪裡?
要不要請人?
不知道!
其實我上面列出的每個知識塊,網上都有,零零散散的而已
你需要自己去辨別,整合這些知識,然後為你所用
現在你明白為什麼網上的教程,都不夠系統,不夠深入了吧
因為這很難,設計的學科知識太多了
1、爬蟲門檻相對較低。
2、個人認為寫爬蟲是非常有趣的一件事情。
3、可以抓到一些自己比較想要或者有用的數據。比如我最近對於租房的問題比較苦惱,於是寫了一個抓豆瓣租房小組信息的爬蟲工具:kong36088/DoubanGroupSpider
4、其實做爬蟲的並不少,爬蟲更多的是相當於一種技術手段,你會寫爬蟲的同時可能還需要其他更多的開發技術以滿足崗位對你的要求。
入門簡單,看起來有趣唄。
然而… 寶寶心裡苦啊… 天天肉眼反混淆 js,折騰反加固,反編譯反彙編肉眼反混淆 android ios app ... 也是很不容易的 嚶嚶嚶
唉,我收集了這麼久的驗證碼訓練集,還沒時間開始寫識別