你不知道的網(wǎng)絡(luò)爬蟲編程那些事住册!爬蟲與反爬的戰(zhàn)爭一直在無聲發(fā)生

前言

對網(wǎng)絡(luò)爬蟲感興趣,想學(xué)習(xí)Python編程的朋友們瓮具,可以關(guān)注我荧飞,私信我“獲取”,自取免費的學(xué)習(xí)資料~

爬蟲與反爬蟲名党,是一個很不陽光的行業(yè)叹阔。

這里說的不陽光,有兩個含義传睹。

第一是耳幢,這個行業(yè)是隱藏在地下的,一般很少被曝光出來欧啤。很多公司對外都不會宣稱自己有爬蟲團(tuán)隊睛藻,甚至隱瞞自己有反爬蟲團(tuán)隊的事實。這可能是出于公司戰(zhàn)略角度來看的邢隧,與技術(shù)無關(guān)店印。

第二是,這個行業(yè)并不是一個很積極向上的行業(yè)倒慧。很多人在這個行業(yè)摸爬滾打了多年按摘,積攢了大量的經(jīng)驗,但是悲哀的發(fā)現(xiàn)纫谅,這些經(jīng)驗很難兌換成閃光的簡歷院峡。面試的時候,因為雙方爬蟲理念或者反爬蟲理念不同系宜,也很可能互不認(rèn)可,影響自己的求職之路发魄。本來程序員就有“文人相輕”的傾向盹牧,何況理念真的大不同。

然而這就是程序員的宿命励幼。不管這個行業(yè)有多么的不陽光汰寓,依然無法阻擋大量的人進(jìn)入這個行業(yè),因為有公司的需求苹粟。

那么有滑,公司到底有什么樣的需求,導(dǎo)致了我們真的需要爬蟲/反爬蟲呢?

反爬蟲很好理解嵌削,有了爬蟲我們自然要反爬蟲毛好。對于程序員來說望艺,哪怕僅僅是出于“我就是要證明我技術(shù)比你好”的目的,也會去做肌访。對于公司來說找默,意義更加重大,最少吼驶,也能降低服務(wù)器負(fù)載惩激,光憑這一點,反爬蟲就有充足的生存價值蟹演。

那么风钻,什么是爬蟲呢?

最早的爬蟲起源于搜索引擎。搜索引擎是善意的爬蟲酒请,可以檢索你的一切信息骡技,并提供給其他用戶訪問。為此他們還專門定義了robots.txt文件蚌父,作為君子協(xié)定哮兰,這是一個雙贏的局面。

然而事情很快被一些人破壞了苟弛。爬蟲很快就變得不再“君子”了喝滞。

后來有了“大數(shù)據(jù)”。無數(shù)的媒體鼓吹大數(shù)據(jù)是未來的趨勢膏秫,吸引了一批又一批的炮灰去創(chuàng)辦大數(shù)據(jù)公司右遭。這些人手頭根本沒有大數(shù)據(jù),他們的數(shù)據(jù)只要用一個U盤就可以裝的下缤削,怎么好意思叫大數(shù)據(jù)呢?這么點數(shù)據(jù)根本忽悠不了投資者窘哈。于是他們開始寫爬蟲,拼命地爬取各個公司的數(shù)據(jù)亭敢。很快他們的數(shù)據(jù)滚婉,就無法用一個U盤裝下了。這個時候終于可以休息休息帅刀,然后出去吹噓融資啦让腹。

然而可悲的是,大容量U盤不斷地在發(fā)布扣溺。他們總是在拼命地追趕存儲增加的速度骇窍。

以上是爬蟲與反爬蟲的歷史。

一锥余、爬蟲反爬蟲運(yùn)行現(xiàn)狀

電子商務(wù)行業(yè)的爬蟲與反爬蟲更有趣一些腹纳,最初的爬蟲需求來源于比價。

這是某些電商網(wǎng)站的核心業(yè)務(wù)。大家如果買商品的時候嘲恍,是一個價格敏感型用戶的話足画,很可能用過網(wǎng)上的比價功能(真心很好用啊)。毫無懸念蛔钙,他們會使用爬蟲技術(shù)來爬取所有相關(guān)電商的價格锌云。他們的爬蟲還是比較溫柔的,對大家的服務(wù)器不會造成太大的壓力吁脱。

然而桑涎,這并不意味著大家喜歡被他爬取。畢竟這對其他電商是不利的兼贡。于是需要通過技術(shù)手段來做反爬蟲攻冷。

按照技術(shù)人員的想法,對方用技術(shù)懟過來遍希,我們就要用技術(shù)懟回去等曼,不能慫啊。這個想法是很好的凿蒜,但是實際應(yīng)用起來根本不是這么回事禁谦。

誠然,技術(shù)是很重要的废封,但是實際操作上州泊,更重要的是套路。誰的套路更深漂洋,誰就能玩弄對方于鼓掌之中遥皂。誰的套路不行,有再好的技術(shù)刽漂,也只能被耍的團(tuán)團(tuán)轉(zhuǎn)演训。這個雖然有點傷技術(shù)人員的自尊,然而贝咙,我們也不是第一天被傷自尊了样悟。大家應(yīng)該早就習(xí)慣了吧。

二庭猩、爬蟲反爬蟲技術(shù)現(xiàn)狀

下面我們談?wù)勎谄妫老x和反爬蟲分別都是怎么做的。

1眯娱、為python平反

首先是爬蟲。爬蟲教程你到處都可以搜得到爬凑,大部分是python寫的徙缴。我曾經(jīng)在一篇文章提到過:用python寫的爬蟲是最薄弱的,因為天生并不適合破解反爬蟲邏輯,因為反爬蟲都是用javascript來處理于样。然而慢慢的疏叨,我發(fā)現(xiàn)這個理解有點問題(當(dāng)然我如果說我當(dāng)時是出于工作需要而有意黑python你們信嗎。穿剖。蚤蔓。)。

Python的確不適合寫反爬蟲邏輯糊余,但是python是一門膠水語言秀又,它適合捆綁任何一種框架。而反爬蟲策略經(jīng)常會變化的翻天覆地贬芥,需要對代碼進(jìn)行大刀闊斧的重構(gòu)吐辙,甚至重寫。這種情況下蘸劈,python不失為一種合適的解決方案昏苏。

舉個例子,你之前是用selenium爬取對方的站點威沫,后來你發(fā)現(xiàn)自己被封了贤惯,而且封鎖方式十分隱蔽,完全搞不清到底是如何封的棒掠,你會怎么辦?你會跟蹤selenium的源碼來找到出錯的地方嗎?

你不會孵构。你只會換個框架,用另一種方式來爬取句柠。然后你就把兩個框架都淺嘗輒止地用了下浦译,一個都沒有深入研究過。因為沒等你研究好溯职,也許人家又換方式了精盅。你不得不再找個框架來爬取。畢竟谜酒,老板等著明天早上開會要數(shù)據(jù)呢叹俏。老板一般都是早上八九點開會,所以你七點之前必須搞定僻族。等你厭倦了粘驰,打算換個工作的時候,簡歷上又只能寫“了解n個框架的使用”述么,僅此而已蝌数。

這就是爬蟲工程師的宿命,爬蟲工程師比外包還可憐度秘。外包雖然不容易積累技術(shù)顶伞,但是好歹有正常上下班時間,爬蟲工程師連這個權(quán)利都沒有。

然而反爬蟲工程師就不可憐了嗎?也不是的唆貌。反爬蟲有個天生的死穴滑潘,就是:誤傷率。

2锨咙、無法繞開的誤傷率

我們首先談?wù)動锫保鎸Ψ降呐老x,你的第一反應(yīng)是什么?

如果限定時間的話酪刀,大部分人給我的答案都是:封殺對方的IP粹舵。

然而,問題就出在蓖宦,IP不是每人一個的齐婴。大的公司有出口IP,ISP有的時候會劫持流量讓你們走代理稠茂,有的人天生喜歡掛代理柠偶,有的人為了翻墻24小時掛vpn,最坑的是睬关,現(xiàn)在是移動互聯(lián)網(wǎng)時代诱担,你如果封了一個IP?不好意思,這是中國聯(lián)通的4G網(wǎng)絡(luò)电爹,5分鐘之前還是別人蔫仙,5分鐘之后就換人了哦!

因此,封IP的誤傷指數(shù)最高丐箩。并且摇邦,效果又是最差的。因為現(xiàn)在即使是最菜的新手屎勘,也知道用代理池了施籍。你們可以去淘寶看下,幾十萬的代理價值多少錢概漱。我們就不談到處都有的免費代理了丑慎。

也有人說:我可以掃描對方端口,如果開放了代理端口瓤摧,那就意味著是個代理竿裂,我就可以封殺了呀。

事實是殘酷的照弥。我曾經(jīng)封殺過一個IP腻异,因為他開放了一個代理端口,而且是個很小眾的代理端口这揣。不出一天就有人來報事件悔常,說我們一個分公司被攔截了敢会。我一查IP,還真是我封的IP这嚣。我就很郁悶地問他們IT,開這個端口干什么?他說做郵件服務(wù)器啊塞俱。我說為啥要用這么奇怪的端口?他說姐帚,這不是怕別人猜出來么?我就隨便取了個。

掃描端口的進(jìn)階版障涯,還有一種方式罐旗,就是去訂單庫查找這個IP是否下過訂單,如果沒有唯蝶,那么就是安全的九秀。如果有,那就不安全粘我。有很多網(wǎng)站會使用這個方法鼓蜒。然而這其實只是一種自欺欺人的辦法而已。只需要下一單征字,就可以永久洗白自己的IP都弹,天下還有比這更便宜的生意嗎?

因此,封IP匙姜,以及封IP的進(jìn)階版:掃描端口再封IP畅厢,都是沒用的。根本不要考慮從IP下手氮昧,因為對手會用大量的時間考慮如何躲避IP封鎖框杜,你干嘛和人家硬剛呢。這沒有任何意義袖肥。

那么咪辱,下一步你會考慮到什么?

很多站點的工程師會考慮:既然沒辦法阻止對方,那我就讓它變的不可讀吧昭伸。我會用圖片來渲染關(guān)鍵信息梧乘,比如價格。這樣庐杨,人眼可見选调,機(jī)器識別不出來。

這個想法曾經(jīng)是正確的灵份,然而仁堪,坑爹的技術(shù)發(fā)展,帶給我們一個坑爹的技術(shù)填渠,叫機(jī)器學(xué)習(xí)弦聂。順便帶動了一個行業(yè)的迅猛發(fā)展鸟辅,叫OCR。很快莺葫,識別圖像就不再是任何難題了匪凉。甚至連人眼都很難識別的驗證碼,有的OCR都能搞定捺檬,比我肉眼識別率都高再层。更何況,現(xiàn)在有了打碼平臺堡纬,用資本都可以搞定聂受,都不需要技術(shù)。

那么烤镐,下一步你會考慮什么?

這個時候蛋济,后端工程師已經(jīng)沒有太多的辦法可以搞了。

不過后端搞不定的事情炮叶,一般都推給前端啊碗旅,前端從來都是后端搞不定問題時的背鍋俠°擦椋 多少年來我們都是這么過來的扛芽。前端工程師這個時候就要勇敢地站出來了:

“都不要得瑟了,來比比誰的前端知識牛逼积瞒,你牛逼我就讓你爬川尖。”

我不知道這篇文章的讀者里有多少前端工程師茫孔,我只是想順便提一下:你們以后將會是更加搶手的人才叮喳。

3、前端工程師的逆襲

我們知道缰贝,一個數(shù)據(jù)要顯示到前端馍悟,不僅僅是后端輸出就完事了,前端要做大量的事情剩晴, 比如取到j(luò)son之后锣咒,至少要用template轉(zhuǎn)成html吧? 這已經(jīng)是步驟最少最簡單的了。然后你總要用css渲染下吧? 這也不是什么難事赞弥。

等等毅整,你還記得自己第一次做這個事情的時候的經(jīng)歷嗎?真的,不是什么難事嗎?

有沒有經(jīng)歷過绽左,一個html標(biāo)簽拼錯悼嫉,或者沒有閉合,導(dǎo)致頁面錯亂?一個css沒弄好拼窥,導(dǎo)致整個頁面都不知道飄到哪去了?

這些事情戏蔑,你是不是很想讓別人再經(jīng)歷一次?

這件事情充分說明了:讓一個資深的前端工程師來把事情搞復(fù)雜一點蹋凝,對方如果配備了資深前端工程師來破解,也需要耗費3倍以上的時間总棵。畢竟是讀別人的代碼鳍寂,別人寫代碼用了一分鐘,你總是要讀兩分鐘情龄,然后罵一分鐘吧?這已經(jīng)算很少的了伐割。如果對方?jīng)]有配備前端工程師。刃唤。。那么經(jīng)過一段時間白群,他們會成長為前端工程師尚胞。

之后,由于前端工程師的待遇比爬蟲工程師稍好一些帜慢,他們很快會離職做前端笼裳,既緩解了前端人才缺口,又可以讓對方缺人粱玲,重招躬柬。而他們一般是招后端做爬蟲,這些人需要再接受一次折磨抽减,再次成長為前端工程師允青。這不是很好的事情嗎。

所以卵沉,如果你手下的爬蟲工程師離職率很高颠锉,請仔細(xì)思考下,是不是自己的招聘方向有問題史汗。

那么前端最坑爹的技術(shù)是什么呢?前端最坑爹的琼掠,也是最強(qiáng)大的,就是我們的:javascript停撞。

Javascript有大量的花樣可以玩瓷蛙,毫不夸張的說,一周換一個feature(bug)給對方學(xué)習(xí)戈毒,一年不帶重樣的艰猬。這個時候你就相當(dāng)于一個面試官,對方要通過你的面試才行副硅。

舉個例子姥宝,Array.prototype里,有沒有map啊?什么時候有啊?你說你是xx瀏覽器恐疲,那你這個應(yīng)該是有還是應(yīng)該沒有啊?你說這個可以有啊?可是這個真沒有啊腊满。那[]能不能在string里面獲取字符啊?哪個瀏覽器可以哪個不行啊?咦你為什么支持webkit前綴啊?等等套么,剛剛你還支持怎么現(xiàn)在不支持了啊?你聲明的不對啊。

這些對于前端都是簡單的知識碳蛋,已經(jīng)習(xí)以為常了胚泌。但是對于后端來說簡直就是噩夢。

然而肃弟,前端人員自己作死玷室,研究出了一個東西,叫:nodejs笤受∏铉停基于v8,秒殺所有的js運(yùn)行箩兽。

不過nodejs實現(xiàn)了大量的feature津肛,都是瀏覽器不存在的。你隨隨便便訪問一些東西(比如你為什么會支持process.exit)汗贫,都會把node坑的好慘好慘身坐。而且。落包。部蛇。瀏覽器里的js,你拉到后臺用nodejs跑咐蝇,你是不是想到了什么安全漏洞?這個是不是叫涯鲁,代碼與數(shù)據(jù)混合?如果他在js里跑點惡心的代碼,瀏覽器不支持但是node支持怎么辦?

還好有序,爬蟲工程師還有phantomjs撮竿。但是,你怎么沒有定位啊? 哈哈笔呀,你終于模擬出了定位幢踏,但是不對啊,根據(jù)我當(dāng)前設(shè)置的安全策略你現(xiàn)在不應(yīng)該能定位啊?你是怎么定出來的?連phantomjs的作者自己都維護(hù)不下去了许师,你真的愿意繼續(xù)用嗎?

當(dāng)然了房蝉,最終,所有的反爬蟲策略都逃不脫被破解的命運(yùn)微渠。但是這需要時間搭幻,反爬蟲需要做的就是頻繁發(fā)布调卑,拖垮對方祟滴。如果對方兩天可以破解你的系統(tǒng),你就一天一發(fā)布灿里,那么你就是安全的云芦。這個系統(tǒng)甚至可以改名叫做“每天一道反爬題俯逾,輕輕松松學(xué)前端”贸桶。

三、爬蟲反爬蟲的未來

與競爭對手和解之后桌肴,我們?nèi)グ菰L對方皇筛,大家坐在了一起。之前網(wǎng)上自稱妹子的坠七,一個個都是五大三粗的漢子水醋,這讓我們相當(dāng)絕望,在場唯一的一個妹子還是我們自己帶過去的(就是上面提到的實習(xí)生)彪置,感覺套路了這么久拄踪,最終還是被對方套路了。

好在拳魁,吃的喝的都很好宫蛆,大家玩的還是比較high的。后續(xù)就是和平年代啦的猛,大家不打仗了,反爬蟲的邏輯扔在那做個防御想虎,然后就開放白名單允許對方爬取了卦尊。群里經(jīng)常叫的就是:xxx你怎么頻率這么高,xxx你為什么這個接口沒給我開放舌厨,為什么我爬的東西不對我靠你是不是把我封了啊岂却。諸如此類的。

和平年代的反爬蟲比戰(zhàn)爭年代還難做裙椭。因為戰(zhàn)爭年代躏哩,誤傷率只要不是太高,公司就可以接受揉燃。和平年代大家不能搞事情扫尺,誤傷率稍稍多一點,就會有人叫:好好的不賺錢炊汤,瞎搞什么搞正驻。此外,戰(zhàn)爭年代只要不攔截用戶抢腐,就不算誤傷姑曙。和平年代還要考慮白名單,攔截了合作伙伴也是誤傷迈倍。因此各方面會更保守一些伤靠。不過,總體來說還是和平年代比較happy啼染。畢竟宴合,誰會喜歡沒事加班玩呢焕梅。

然而和平持續(xù)的不是很久,很快就有了新的競爭對手選擇爬蟲來與我們打形纺。畢竟丘侠,這是一個利益驅(qū)使的世界。只要有大量的利潤逐样,資本家就會殺人放火蜗字,這不是我們這些技術(shù)人員可以決定的。我們希望天下無蟲脂新,但是我們又有什么權(quán)利呢挪捕。

對網(wǎng)絡(luò)爬蟲感興趣,想學(xué)習(xí)Python編程的朋友們争便,可以關(guān)注我级零,私信我“獲取”,自取免費的學(xué)習(xí)資料~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滞乙,一起剝皮案震驚了整個濱河市奏纪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斩启,老刑警劉巖序调,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異兔簇,居然都是意外死亡发绢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門垄琐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來边酒,“玉大人,你說我怎么就攤上這事狸窘《针” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵翻擒,是天一觀的道長介杆。 經(jīng)常有香客問我,道長韭寸,這世上最難降的妖魔是什么春哨? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮恩伺,結(jié)果婚禮上赴背,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好凰荚,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布燃观。 她就那樣靜靜地躺著,像睡著了一般便瑟。 火紅的嫁衣襯著肌膚如雪缆毁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天到涂,我揣著相機(jī)與錄音脊框,去河邊找鬼。 笑死践啄,一個胖子當(dāng)著我的面吹牛浇雹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屿讽,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昭灵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伐谈?” 一聲冷哼從身側(cè)響起烂完,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诵棵,沒想到半個月后抠蚣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡非春,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缓屠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奇昙。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敌完,靈堂內(nèi)的尸體忽然破棺而出储耐,到底是詐尸還是另有隱情,我是刑警寧澤滨溉,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布什湘,位于F島的核電站,受9級特大地震影響晦攒,放射性物質(zhì)發(fā)生泄漏闽撤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一脯颜、第九天 我趴在偏房一處隱蔽的房頂上張望哟旗。 院中可真熱鬧,春花似錦、人聲如沸闸餐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舍沙。三九已至近上,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拂铡,已是汗流浹背壹无。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留和媳,地道東北人格遭。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像留瞳,于是被迫代替她去往敵國和親拒迅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355