爬蟲工程師勸退文

前言:本文無源碼,來聊聊爬蟲工程師終將逝去的青春mysql

此刻的我正坐在工位上,看着面前的某網站爬蟲代碼,陷入了回憶。git

緣起

「你寫一下XX網的爬蟲,主要是爬一下我的資料,你大概須要多久?」 「四、5天吧」,曾經用二、3天寫了知乎爬蟲的我給本身留了寬裕的時間用來摸魚。 「那好,我給你一個星期時間。」 「好的」程序員

這是零工做經驗的我入職這家公司以來接到的第一個項目,從零開始寫一個爬蟲。github

既不是在爬蟲系統上添加功能,也不是給祖傳代碼填坑。ajax

我給了本身四、5天時間。redis

而後就走上了這條不歸路……sql

一個爬(fei)蟲(pin)的誕生

基於程序員必備的搜索技能,我迅速的在github上找到了一個類似的爬蟲代碼。chrome

修修改改,我只花費了2天時間就寫好了爬蟲,post請求呀、ajax異步加載呀、正則匹配呀、json呀什麼的,甚至還優化了原做者的代碼。數據庫

同時,距離做者寫出這個代碼,已通過去好久了,網站一些信息的獲取規則已經不一樣了。因爲網站特別的策略,我學會了識別網頁源碼假裝經過二次傳遞值來查找目標信息。(首先找到傳遞值,再經過傳遞值匹配目標信息)json

因而,很快,個人爬蟲歡樂地運行了起來。

而且,滿(nei)懷(liu)熱(man)情(mian)地花了1個多月時間爲本身的爬蟲補坑(手動再見。

第一個障礙

爬蟲跑起來以後,因爲單個帳號請求次數過多,出現了驗證碼,會往註冊的郵箱裏發一條包含驗證碼的郵件,填上就能夠從新登入。

我始終沒有經過requests越過這道坎,最終我選擇了用selenium來登陸網站並提交驗證碼,並將登陸成功後的cookies信息傳遞給獲取信息的函數塊中。

這時,我學會了用imaplib模塊登陸郵箱獲取驗證碼。

部署服務器

解決了驗證碼登陸的問題,程序又一次跑了起來,此時就須要部署到服務器上了。

selenium的瀏覽器chrome不利於在服務器上運行,因而我學會了將selenium結合無頭瀏覽器phantomjs使用。

服務器是新開的,環境還須要配置,因而我又學會了配置服務器的基本操做

功能分離

當單個帳號單日發送的請求過多達到閥值時,網站絕不留情地封掉了帳號,沒有冷卻時間,永久封禁。

同事爲我提供了批量的帳號,而我 跑崩了一個又一個。

因而我又改變了使用帳號的策略,多個帳號,輪流爬,每一個爬幾下就換。

此時不停地用selenium登陸帳號已經變成肥腸影響爬蟲速度的一個事情了,因而我開始分割代碼。

一個代碼用來爲帳號更新cookie,一個代碼直接取cookie,而可用的cookie信息,我存在了mysql中(這或許就是菜雞吧)。。。。。

而這樣的功能分離,它有一個高級的名字,生產者-消費者模型

多線程

此時爬蟲,已經能夠無障礙的運行了,擋在面前的問題是爬蟲的速度,我開啓了多線程,這時問題又來了,url的重複提取問題,單例運行時不須要考慮的問題,但當開啓了多線程、多進程等併發操做時,url的去重就變得必要了。

再一次功能分離,將須要提取的url,放入redis庫中,爬蟲程序中直接使用pop函數獲取url,取出即刪除,不會出現重複提取的狀況,redis是一個在緩存方面很是優秀的數據庫。

此時的代碼爲了多線程的配合,將全部的與爬蟲無關的,獲取cookies,存取數據信息,都分離了出來,全部的通訊都只存在於redis之間。

最後

有人會想,這不就是一個項目的流程嗎?

爲何這篇文章的名字是爬蟲工程師勸退文呢?

由於個人帳號依然被禁了。。。。。

因而我接手了同事的註冊帳號的項目。。。。。

砸了N多經費去買ip,買收驗證碼的手機號。。。。。

折騰了N久終於準備開心地把註冊機代碼也部署到服務器上造成程序閉環。。。。。

發現網站改了註冊策略。。。。。。。

總結語:你看,學了這麼多知識,依然過很差這爬蟲工程師的一輩子,你們仍是不要私信問我須要哪些技能才能作爬蟲工程師了!趕忙轉行跑路吧!(敲黑板!劃重點!)

相關文章
相關標籤/搜索