Python爬蟲工程師需要掌握哪些技術?

一晨抡、爬蟲工程師是干嘛的氛悬?

1、主要工作內容耘柱?

互聯(lián)網是由一個一個的超鏈接組成的如捅,從一個網頁的鏈接可以跳到另一個網頁,在新的網頁里调煎,又有很多鏈接镜遣。理論上講,從任何一個網頁開始士袄,不斷點開鏈接悲关、鏈接的網頁的鏈接,就可以走遍整個互聯(lián)網娄柳!這個過程是不是像蜘蛛沿著網一樣爬寓辱?這也是“爬蟲”名字的由來。

作為爬蟲工程師赤拒,就是要寫出一些能夠沿著網爬的”蜘蛛“程序秫筏,保存下來獲得的信息诱鞠。一般來說,需要爬出來的信息都是結構化的这敬,如果不是結構化的航夺,那么也就沒什么意義了(百分之八十的數據是非結構化的)。爬蟲的規(guī)拇尥浚可達可小阳掐,小到可以爬取豆瓣的top 250電影,定時爬取一個星期的天氣預報等冷蚂。大到可以爬取整個互聯(lián)網的網頁(例如google)缭保。下面這些,我認為都可以叫做爬蟲:

爬知乎的作者和回答

爬百度網盤的資源帝雇,存到數據庫中(當然涮俄,只是保存資源的鏈接和標題),然后制作一個網盤的搜索引擎

同上尸闸,種子網站的搜索引擎也是這樣的

到這里彻亲,我們知道爬蟲的任務是獲取數據。現在比較流行大數據吮廉,從互聯(lián)網方面講苞尝,數據可以分成兩種,一種是用戶產生的(UGC)宦芦,第二種就是通過一些手段獲得的宙址,通常就是爬蟲。爬蟲又不僅僅局限于從網頁中獲得數據调卑,也可以從app抓包等抡砂。簡而言之,就是聚合數據并讓他們結構化恬涧。那么注益,哪些工作需要爬蟲呢?

2溯捆、爬蟲能做什么丑搔?

典型的數據聚合類的網站都需要爬蟲。比如Google搜索引擎提揍。Google能在幾毫秒之內提供給你包含某些關鍵字的頁面啤月,肯定不是實時給你去找網頁的,而是提前抓好劳跃,保存在他們自己的數據庫里(那他們的數據庫得多大呀)谎仲。所以種子搜索引擎,網盤搜索引擎刨仑,Resillio key引擎等都是用爬蟲實現抓好數據放在數據庫里的郑诺。

另外有一些提供信息對比的網站绞呈,比如比價類的網站,就是通過爬蟲抓取不同購物網站商品的價格间景,然后將各個購物網站的價格展示在網站上。購物網站的價格時時都在變艺智,但是比價網站抓到的數據不會刪除倘要,所以可以提供價格走勢,這是購物網站不會提供的信息十拣。

除此之外封拧,個人還可以用爬蟲做一些好玩的事情。比如我們想看大量的圖片夭问,可以寫一個爬蟲批量下載下來泽西,不必一個一個點擊保存,還要忍受網站的廣告了缰趋;比如我們想備份自己的資料捧杉,例如保存下來我們在豆瓣發(fā)布過的所有的廣播,可以使用爬蟲將自己發(fā)布的內容全部抓下來秘血,這樣即使一些網站沒有提供備份服務味抖,我們也可以自己豐衣足食。

為了幫助大家更輕松的學好Python灰粮,爬蟲技術仔涩,Python數據分析等相關知識,給大家分享一套Python學習資料,小編推薦一個學Python爬蟲技術的學習裙粘舟;五八三二六二一六八熔脂,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習柑肴!裙內有開發(fā)工具霞揉,很多干貨和技術資料分享!

二嘉抒、爬蟲工程師需要掌握哪些技能零聚?

我見過這樣的說法:“爬蟲是低級、重復性很多的工作些侍,沒有發(fā)展前途”隶症。這是誤解。首先岗宣,對于程序員來說基本上不存在重復性的工作蚂会,任何重復勞動都可以通過程序自動解決。例如博主之前要抓十幾個相似度很高但是html結構不太一樣的網站耗式,我就寫了一個簡單的代碼生成器胁住,從爬蟲代碼到單元測試代碼都可以自動生成趁猴,只要對應html結構稍微修改一下就行了。所以我認為彪见,重復性的勞動在編程方面來說基本上是不存在的儡司,如果你認為自己做的工作是重復性的,說明你比較勤快余指,不愿意去偷懶捕犬。而我還認為级零,勤快的程序員不是好程序員铣鹏。下面我根據自己這段時間的工作經歷衬衬,講一講爬蟲需要哪些相關的技能玛痊。

1硬耍、基本的編碼基礎(至少一門編程語言)

這個對于任何編程工作來說都是必須的窗慎「鍪基礎的數據結構你得會吧劲够。數據名字和值得對應(字典)靠粪,對一些url進行處理(列表)等等蜡吧。事實上,掌握的越牢固越好占键,爬蟲并不是一個簡單的工作斩跌,也并不比其他工作對編程語言的要求更高。熟悉你用的編程語言捞慌,熟悉相關的框架和庫永遠是百益無害耀鸦。

我主要用Python,用Java寫爬蟲的也有啸澡,理論上講任何語言都可以寫爬蟲的袖订,不過最好選擇一門相關的庫多,開發(fā)迅速的語言嗅虏。用C語言寫肯定是自找苦吃了洛姑。

2、任務隊列

當爬蟲任務很大的時候皮服,寫一個程序跑下來是不合適的:

如果中間遇到錯誤停掉楞艾,重頭再來?這不科學

我怎么知道程序在哪里失敗了龄广?任務和任務之間不應該相互影響

如果我有兩臺機器怎么分工硫眯?

所以我們需要一種任務隊列,它的作用是:講計劃抓取的網頁都放到任務隊列里面去择同。然后worker從隊列中拿出來一個一個執(zhí)行两入,如果一個失敗,記錄一下敲才,然后執(zhí)行下一個裹纳。這樣择葡,worker就可以一個接一個地執(zhí)行下去。也增加了擴展性剃氧,幾億個任務放在隊列里也沒問題敏储,有需要可以增加worker,就像多一雙虧筷子吃飯一樣朋鞍。

常用的任務隊列有kafka虹曙,beanstalkd,celery等番舆。

3、數據庫

這個不用講了矾踱,數據保存肯定要會數據庫的恨狈。不過有時候一些小數據也可以保存成json或者csv等。我有時想抓一些圖片就直接按照文件夾保存文件呛讲。

推薦使用NoSQL的數據庫禾怠,比如mongodb,因為爬蟲抓到的數據一般是都字段-值得對應贝搁,有些字段有的網站有有的網站沒有吗氏,mongo在這方面比較靈活,況且爬蟲爬到的數據關系非常非常弱雷逆,很少會用到表與表的關系弦讽。

4、HTTP知識

HTTP知識是必備技能膀哲。因為要爬的是網頁往产,所以必須要了解網頁啊。

首先html文檔的解析方法要懂某宪,比如子節(jié)點父節(jié)點仿村,屬性這些。我們看到的網頁是五彩斑斕的兴喂,只不過是被瀏覽器處理了而已蔼囊,原始的網頁是由很多標簽組成的。處理最好使用html的解析器衣迷,如果自己用正則匹配的話坑會很多畏鼓。我個人非常喜歡xpath,跨語言壶谒,表達比價好滴肿,但是也有缺點,正則佃迄、邏輯判斷有點別扭泼差。

HTTP協(xié)議要理解贵少。HTTP協(xié)議本身是無狀態(tài)的,那么“登錄”是怎么實現的堆缘?這就要求去了解一下session和cookies了滔灶。GET方法和POST方法的區(qū)別(事實上除了字面意思不一樣沒有任何區(qū)別)。

瀏覽器要熟練吼肥。爬蟲的過程其實是模擬人類去瀏覽器數據的過程录平。所以瀏覽器是怎么訪問一個網站的,你要學會去觀察缀皱,怎么觀察呢斗这?Developer Tools!Chrome的Developer Tools提供了訪問網站的一切信息啤斗。從traffic可以看到所有發(fā)出去的請求表箭。copy as curl功能可以給你生成和瀏覽器請求完全一致的curl請求!我寫一個爬蟲的一般流程是這樣的钮莲,先用瀏覽器訪問免钻,然后copy as curl看看有哪些header,cookies崔拥,然后用代碼模擬出來這個請求极舔,最后處理請求的結果保存下來。

5链瓦、運維

這個話題要說的有很多拆魏,實際工作中運維和開發(fā)的時間差不多甚至更多一些。維護已經在工作的爬蟲是一個繁重的工作慈俯。隨著工作時間增加稽揭,一般我們都會學著讓寫出來的爬蟲更好維護一些。比如爬蟲的日志系統(tǒng)肥卡,數據量的統(tǒng)計等溪掀。將爬蟲工程師和運維分開也不太合理,因為如果一個爬蟲不工作了步鉴,那原因可能是要抓的網頁更新了結構揪胃,也有可能出現在系統(tǒng)上,也有可能是當初開發(fā)爬蟲的時候沒發(fā)現反扒策略氛琢,上線之后出問題了喊递,也可能是對方網站發(fā)現了你是爬蟲把你封殺了,所以一般來說開發(fā)爬蟲要兼顧運維阳似。

所以爬蟲的運維我可以提供下面幾個思路:

首先骚勘,從數據增量監(jiān)控。定向爬蟲(指的是只針對一個網站的爬蟲)比較容易,一段時間之后對一些網站的數據增量會有一個大體的了解俏讹。經车毖纾看看這些數據的增加趨勢是否是正常就可以了(Grafana)。非定向爬蟲的數據增量不是很穩(wěn)定泽疆,一般看機器的網絡狀況户矢,網站的更新情況等(這方面我的經驗不多)。

然后看爬蟲執(zhí)行的成功情況殉疼。在上面提到了用任務隊列控制爬蟲工作梯浪,這樣解耦可以帶來很多好處,其中一個就是可以就是可以對一次爬蟲執(zhí)行進行日志瓢娜」衣澹可以在每次爬蟲任務執(zhí)行的時候,將執(zhí)行的時間眠砾、狀態(tài)虏劲、目標url、異常等放入一個日志系統(tǒng)(比如kibana)荠藤,然后通過一個可視化的手段可以清晰地看到爬蟲的失敗率。

爬蟲拋出的Exception获高。幾乎所有的項目都會用到錯誤日志收集(Sentry)哈肖,這里需要注意的一點是,忽略正常的異常(比如Connection錯誤念秧,鎖沖突等)淤井,否則的話你會被這些錯誤淹沒。

三摊趾、爬蟲與反爬

這同樣是很深的一個話題币狠,就像攻擊武器與防御武器一樣,雙方總是在不斷升級砾层。常見的反爬措施(我遇到過的)有下面幾種:

1漩绵、訪問頻率

很好理解,如果訪問太頻繁網站可能針對你的ip封鎖一段時間肛炮,這和防DDoS的原理一樣止吐。對于爬蟲來說,碰到這樣的限制一下任務的頻率就可以了侨糟,可以盡量讓爬蟲想人類一樣訪問網頁(比如隨機sleep一段時間碍扔,如果每隔3s訪問一次網站很顯然不是正常人的行為)。

2秕重、登錄限制

也比較常見不同。不過公開信息的網站一般不會有這個限制,這樣讓用戶也麻煩了。其實反爬措施都或多或少的影響真實用戶二拐,反爬越嚴格服鹅,誤殺用戶的可能性也越高。對爬蟲來說卓鹿,登錄同樣可以通過模擬登錄的方式解決菱魔,加個cookie就行了(話又說回來,網絡的原理很重要)吟孙。

3澜倦、通過Header封殺

一般瀏覽器訪問網站會有header,比如Safari或者Chrome等等杰妓,還有操作系統(tǒng)信息藻治。如果使用程序訪問并不會有這樣的header。破解也很簡單巷挥,訪問的時候加上header就行桩卵。

4、JavaScript腳本動態(tài)獲取網站數據

有一些網站(尤其是單頁面網站)的內容并不是通過服務器直接返回的倍宾,而是服務器只返回一個客戶端JavaScript程序雏节,然后JavaScript獲取內容。更高級的是高职,JavaScript在本地計算一個token钩乍,然后拿這個token來進行AJAX獲取內容。而本地的JavaScript又是經過代碼混淆和加密的怔锌,這樣我們做爬蟲的通過看源代碼幾乎不可能模擬出來這個請求(主要是token不可能破解)寥粹,但是我們可以從另一個角度:headless的瀏覽器,也就是我們直接運行這個客戶端程序埃元,這可以100%地模擬真實用戶涝涤!

5、驗證碼

這幾乎是終極武器了岛杀,驗證碼是專門用來區(qū)分人和計算機的手段阔拳。對于反爬方來說,這種方式對真實用戶和搜索引擎(其實可以通過記錄搜索引擎爬蟲的ip來區(qū)別對待类嗤,可以解決)的危害比較大衫生,相信讀者都有輸入驗證碼的痛苦經歷。但這種方法也并不是無敵的土浸!通過現在很火的機器學習可以輕松的識別大部分的驗證碼罪针!Google的reCAPTCHA是一種非常高級的驗證碼,但是聽過通過模擬瀏覽器也是可以破解的黄伊。

6泪酱、ip限制

網站可能將識別的ip永久封殺,這種方式需要的人力比較大,而且誤傷用戶的代價也很高墓阀。但是破解辦法卻非常簡單毡惜。目前代理池幾乎是搞爬蟲的標配了,甚至還有很多高匿代理等好用的東西斯撮。所以這基本上只能殺殺小爬蟲经伙。

7、網站內容反爬

有一些網站將網站內容用只有人類可以接收的形式來呈現(其實反爬就是區(qū)別對待人類和機器嘛)勿锅。比如將內容用圖片的形式顯示帕膜。但是近幾年來人類和機器的差別越來越小,圖片可以用OCR準確率非常高地去識別溢十。

反爬總結

爬蟲和反爬是典型的攻防雙方的互相升級垮刹。但是我認為,這種升級不像軍事张弛,軍事是無盡頭的荒典,但是爬蟲和反爬是有盡頭的。

爬蟲的盡頭就是瀏覽器吞鸭,一旦使用瀏覽器寺董,程序完全可以模擬真實用戶發(fā)出請求,缺點是就是消耗資源刻剥,因為需要新開一個進程遮咖,解析DOM,運行客戶端JavaScript代碼透敌。(chrome的node api在github開源僅僅兩天盯滚,就拿到8k個star)

反爬的盡頭就是像Google這種超級厲害的驗證碼踢械,畢竟驗證碼的根本目的就是識別人類和機器的酗电。

我正好有一個反爬做的非常好的例子。Google Arts Project項目是一個匯聚世界名畫的藝術長廊内列,我比較喜歡里面的一些畫撵术,所以想下載一些(當然這是不對的),然后發(fā)現這個網站反爬做的相當好(因為版權屬于收藏作品的博物館话瞧,所以Google Arts Project肯定不會提供下載)嫩与,要下載幾乎是不可能的。我有點不服交排,開始用各種手段試圖下載原圖划滋。嘗試了一番,發(fā)現這個網站block掉了鼠標右鍵功能埃篓、審查元素發(fā)現圖片并不是一個常規(guī)的圖片处坪、追蹤網絡包發(fā)現原圖竟然不是一次網絡請求拿到的,而是分成了好幾次請求base64編碼的字符流每次請求圖片的一部分,然后在客戶端組裝起來圖片同窘!當然在客戶端的代碼也是經過加密和混淆的玄帕!這完全可以作為反爬的教科書了,既沒有誤傷用戶想邦,又讓爬蟲無法下手裤纹。

圖片每次只請求部分

四、職業(yè)道德

成規(guī)模的爬蟲一般都會使用集群鹰椒,一般的小網站服務器規(guī)穆钐可能不如爬蟲集群的規(guī)模大。所以很多時候我們最好對要爬的網站限制一下頻率灿椅。否則這些爬蟲就相當于DoS攻擊集群了!一般的網站都會有robots.txt可以參考钞支。

好了茫蛹,總結來說,寫爬蟲需要經驗積累婴洼,需要靈活的思路。比如說我之前就遇到過網站撼嗓,需要驗證碼驗證拿到一個token柬采,可是通過看網絡請求發(fā)現這個token長得很像一個時間戳,然后本地自己生成一個時間戳發(fā)現也是能用的且警!于是就這樣繞過了驗證碼粉捻。所以多多積累和嘗試,可以偷不少懶肩刃,嘿嘿盈包。

另外爬蟲也不是和我之前想的那樣是一個枯燥無味的工作呢燥,比如我就發(fā)現了不少很垃圾叛氨,很搞笑的網站力试,樂趣也蠻多的畸裳。學到的東西也不少怖糊。萬變不離其宗嘛伍伤。

五并徘、工作內容

互聯(lián)網時代信息無處不在麦乞,我們日常所接觸的大量信息例如微博、社交媒體網站的帖子姐直、消費者點評声畏、新聞插龄、銷售人員的拜訪記錄,這些都是常見的非結構化數據來源科展。非結構化數據分析能夠揭示潛藏在文本當中的趨勢和關聯(lián)辛润,為商業(yè)決策砂竖、研究行業(yè)趨勢和熱點內容分析提供有力支持乎澄。

緯橫團隊致力于打造最出色的中文語義分析技術置济,通過自主研發(fā)的中文分詞浙于、句法分析羞酗、搜素引擎和實體識別技術檀轨,結合海量行業(yè)語料的不斷積累卫枝,為企業(yè)客戶(營銷校赤、公關、客服痒谴、銷售和產品部門)、研究機構和政府部門等提供數據監(jiān)測和采集尽爆、分析和可視化以及專業(yè)服務漱贱,增強用戶在大數據時代的競爭力。

崗位職責

1. 分布式網頁抓取平臺的研發(fā)崇摄、完善和運維逐抑,每天支持數千萬級的網頁采集进每、清洗和分析命斧;

2. 產品后端 API 的開發(fā)肉瓦,實現高性能泞莉、高可用及可擴展的后端代碼鲫趁;

3. 線上分布式環(huán)境的自動化運維、監(jiān)控疫剃、性能調優(yōu)巢价。

職位要求

1. 扎實的算法與數據結構功底,對新的知識和技術有強烈熱情壤躲;

2. 具有較強的分析和解決問題的能力碉克;

3. 擁有良好的編程習慣;

4. 熟悉至少一門高級編程語言(例如 Python/C++/JAVA )并有實際開發(fā)的經驗漏麦。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末窝剖,一起剝皮案震驚了整個濱河市赐纱,隨后出現的幾起案子脊奋,更是在濱河造成了極大的恐慌,老刑警劉巖久又,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件地消,死亡現場離奇詭異,居然都是意外死亡半夷,警方通過查閱死者的電腦和手機迅细,發(fā)現死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門湘换,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事砂吞。” “怎么了盯质?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵呼巷,是天一觀的道長餐曼。 經常有香客問我压储,道長,這世上最難降的妖魔是什么雷绢? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任翘紊,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘匿级。我一直安慰自己,他們只是感情好肖粮,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布孤页。 她就那樣靜靜地躺著,像睡著了一般涩馆。 火紅的嫁衣襯著肌膚如雪行施。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天魂那,我揣著相機與錄音蛾号,去河邊找鬼。 笑死涯雅,一個胖子當著我的面吹牛鲜结,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼精刷,長吁一口氣:“原來是場噩夢啊……” “哼拗胜!你這毒婦竟也來了?” 一聲冷哼從身側響起贬养,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤挤土,失蹤者是張志新(化名)和其女友劉穎琴庵,沒想到半個月后误算,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡迷殿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年儿礼,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庆寺。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚊夫,死狀恐怖,靈堂內的尸體忽然破棺而出懦尝,到底是詐尸還是另有隱情知纷,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布陵霉,位于F島的核電站琅轧,受9級特大地震影響,放射性物質發(fā)生泄漏踊挠。R本人自食惡果不足惜乍桂,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望效床。 院中可真熱鬧睹酌,春花似錦、人聲如沸剩檀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪猴。三九已至卤妒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間字币,已是汗流浹背则披。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洗出,地道東北人士复。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阱洪。 傳聞我的和親對象是個殘疾皇子便贵,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容