自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我是一個(gè)Web Crawler , 你們經(jīng)常說(shuō)的爬蟲!

開發(fā) 前端
我是一個(gè)Web Crawler , 有時(shí)候稱為Spider , 你們經(jīng)常說(shuō)的爬蟲就是我。我想我是遇到了好時(shí)代,感謝IT政府,提供了簡(jiǎn)單的HTTP協(xié)議,還有HTML,CSS, JavaScript這一系列開放的技術(shù), 原來(lái)的桌面應(yīng)用,局域網(wǎng)應(yīng)用都被搬到了網(wǎng)絡(luò)上,形成了一個(gè)個(gè)的網(wǎng)站, 網(wǎng)站互聯(lián)起來(lái),形成了一個(gè)覆蓋全世界的大網(wǎng)。

[[231663]]

誕生

我是一個(gè)Web Crawler , 有時(shí)候稱為Spider , 你們經(jīng)常說(shuō)的爬蟲就是我。

我想我是遇到了好時(shí)代,感謝IT政府,提供了簡(jiǎn)單的HTTP協(xié)議,還有HTML,CSS, JavaScript這一系列開放的技術(shù), 原來(lái)的桌面應(yīng)用,局域網(wǎng)應(yīng)用都被搬到了網(wǎng)絡(luò)上,形成了一個(gè)個(gè)的網(wǎng)站, 網(wǎng)站互聯(lián)起來(lái),形成了一個(gè)覆蓋全世界的大網(wǎng)。

在這個(gè)大背景下,我應(yīng)運(yùn)而生,開始在這個(gè)大網(wǎng)上爬來(lái)爬去,收集、分析各種網(wǎng)頁(yè)的數(shù)據(jù)。

我有幾個(gè)親戚在搜索引擎公司工作,聽說(shuō)他們的目標(biāo)是把全世界的網(wǎng)頁(yè)都給爬下來(lái),形成索引,讓人類搜索, 想想全世界網(wǎng)頁(yè)的數(shù)量,這幾位親戚的工作實(shí)在是讓人敬畏。

我的工作原理非常簡(jiǎn)單, 給我一個(gè)URL,我就可以通過(guò)HTTP協(xié)議把HTML頁(yè)面下載下來(lái)。然后分析一下這個(gè)頁(yè)面中有哪些元素,比如說(shuō),表單,表格,鏈接等等。

反正這個(gè)HTML頁(yè)面是純文本的,我想怎么折騰都可以,我可以把它形成一顆DOM樹,也可以用正則表達(dá)式去獲得一段我想要的內(nèi)容,總之方法多得很呢!

最重要的是,我要拿到這個(gè)頁(yè)面中的其他鏈接, 然后再拿到這些鏈接對(duì)應(yīng)的HTML頁(yè)面,繼續(xù)我的分析,如此循環(huán)下去,就能把所有的頁(yè)面給找出來(lái)了,所有的內(nèi)容都盡在掌握!

有時(shí)候,有些HTML頁(yè)面是受到保護(hù)的,必須登陸以后才能夠訪問(wèn),這也難不住我,人類早已經(jīng)申請(qǐng)了很多的賬號(hào)。我把這些用戶名和密碼拿過(guò)來(lái),找到對(duì)應(yīng)的登錄框,向服務(wù)器端發(fā)送一個(gè)請(qǐng)求,就可以順利登錄了, 訪問(wèn)受保護(hù)網(wǎng)頁(yè)的大門就敞開了。

所以說(shuō)我有兩個(gè)最基本的能力, 第一,通過(guò)HTTP協(xié)議訪問(wèn)網(wǎng)頁(yè);  第二,分析HTML網(wǎng)頁(yè)。

斗爭(zhēng)

所謂“爬亦有道”, 我們爬蟲界也是有一定規(guī)范的,比如說(shuō),你在你的網(wǎng)站的根目錄下放一個(gè)robots.txt文件,里邊定義好那些內(nèi)容對(duì)爬蟲開放,那些內(nèi)容不希望爬蟲訪問(wèn), 那我們就不會(huì)去爬這些內(nèi)容了。

當(dāng)然這只是個(gè)約定俗成的規(guī)范,而不是標(biāo)準(zhǔn), 所以總是有一些爬蟲完全不遵守規(guī)則,置這些規(guī)范于不顧。

作為程序,我們?cè)L問(wèn)起網(wǎng)絡(luò)來(lái), 要遠(yuǎn)遠(yuǎn)比人類快得多,人類還需要在界面上移動(dòng)鼠標(biāo)點(diǎn)擊,我們則是拿到URL后直接、迅速、毫不猶豫地訪問(wèn), 這樣一來(lái),如果爬蟲很多,常常給一些網(wǎng)站帶來(lái)非常大的流量,給服務(wù)器帶來(lái)很大的壓力,影響了正常用戶的訪問(wèn), 從而影響了網(wǎng)站的收入。

斷人財(cái)路,網(wǎng)站就急眼了, 肯定要反擊, 于是他們網(wǎng)站便提出了各種各樣的辦法,成為反爬蟲。 他們有反爬蟲, 我們便反反爬蟲,于是便引發(fā)了一場(chǎng)波瀾壯闊,反復(fù)拉鋸的戰(zhàn)爭(zhēng)。

首先他們得把我們給識(shí)別出來(lái)才行。最早爬蟲在發(fā)出HTTP請(qǐng)求的時(shí)候,不注意偽裝自己,不會(huì)修改User Agent ,相當(dāng)于告訴對(duì)方說(shuō): 我是爬蟲。

于是這些網(wǎng)站輕輕松松的就把我們識(shí)別出來(lái),返回一個(gè)錯(cuò)誤碼,或者干脆禁止我們?cè)L問(wèn)。

什么? 你還不知道什么是User Agent ?

User Agent其實(shí)就是HTTP Header 中的一個(gè)字符串,讓服務(wù)器端能識(shí)別客戶端的操作系統(tǒng)及版本,瀏覽器及版本,瀏覽器引擎,語(yǔ)言等等信息。 這樣可以針對(duì)性地做一些處理,例如發(fā)送桌面版或者手機(jī)版的網(wǎng)頁(yè)。

比如: User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)

后來(lái)我們也學(xué)精了,把這個(gè)User Agent 設(shè)置得和人類的瀏覽器一模一樣,對(duì)方就不好識(shí)別了。

有時(shí)候我們還可以偽裝成Google的爬蟲,百度的爬蟲, 各個(gè)網(wǎng)站自然希望百度和Google去對(duì)自己的網(wǎng)頁(yè)做索引的,所以對(duì)這樣的User Agent不會(huì)下狠手拒絕。

但是他們也有別的辦法,比如分析我們的行為,利用我們速度快的特點(diǎn), 比如說(shuō),一秒之內(nèi)有多少次請(qǐng)求,就認(rèn)為是爬蟲。

我們也得斗智斗勇,訪問(wèn)一會(huì)兒就休眠幾秒鐘,然后接著再訪問(wèn),讓他們的策略失效。

但是我們也不能老是休息呀,如果休息得太多,那我們就會(huì)人類的速度差不多了,爬蟲還有什么意義?

陷阱,驗(yàn)證碼,投毒

有些網(wǎng)站會(huì)采取一些非常“惡劣”的手段,我最難以防范的就是陷阱。

具體來(lái)說(shuō),就是在網(wǎng)站發(fā)回的HTML頁(yè)面中,包含一些人類肉眼看不到的鏈接,比如弄個(gè)一個(gè)像素大小的圖片,上面有個(gè)鏈接。

人類看不到,是絕對(duì)不會(huì)點(diǎn)擊的,但是我們爬蟲是程序啊,能分析所有的鏈接并訪問(wèn)之。 但是以我們的智商,并不知道這是一個(gè)陷阱??!

這些陷阱就像漂浮在網(wǎng)頁(yè)中的幽靈, 只要我們一訪問(wèn)這些鏈接,服務(wù)器立刻就會(huì)知道,哼哼,又來(lái)一個(gè)爬蟲,立刻啟動(dòng)大殺招:封IP!

他們還有一招就是驗(yàn)證碼, 如果一段時(shí)間內(nèi)訪問(wèn)的次數(shù)超過(guò)了某個(gè)閾值,立刻顯示一個(gè)圖形驗(yàn)證碼,輸入驗(yàn)證碼以后才能繼續(xù),這實(shí)在是太討厭了, 因?yàn)轵?yàn)證碼是個(gè)圖片, 人類肉眼輕松識(shí)別,可是我想識(shí)別還得靠別的軟件或者系統(tǒng),比如OCR。

但是驗(yàn)證現(xiàn)在搞得越來(lái)越復(fù)雜,什么滑塊驗(yàn)證,什么數(shù)學(xué)題...... 單純的OCR都不夠了。

不過(guò)我也不怕,我可以做分布式,反正機(jī)器多,讓每個(gè)機(jī)器上的爬蟲運(yùn)行得稍微慢一點(diǎn),不要觸發(fā)服務(wù)器端的各種討厭的封鎖策略。

我還可以用代理,讓IP不斷變換,封了一個(gè)IP, 就用另外一個(gè),子子孫孫無(wú)窮匱也。

我最煩的就是“投毒”,這一招最損, 網(wǎng)站識(shí)別出來(lái)我是爬蟲以后,并不會(huì)把我的IP關(guān)到小黑屋,而是很陰險(xiǎn)地發(fā)送一些假數(shù)據(jù),和真實(shí)數(shù)據(jù)混在一起,讓我喜滋滋地取走,不知道過(guò)了多少天,主人用數(shù)據(jù)做分析時(shí)才發(fā)現(xiàn): 嗯,這數(shù)據(jù)有點(diǎn)不對(duì)頭啊! 到底是怎么回事!?。? 于是我被拖出去打了50大板,真是冤枉啊。

新裝備

最近的日子有點(diǎn)不大對(duì)頭兒,訪問(wèn)一個(gè)URL后,返回的HTML特別少,JS特別多,我從HTML中幾乎找不到什么有用的東西。

主人看到我干活效率驟然降低,趕緊親自上手研究了一番,他用Chrome打開網(wǎng)站,按F12, 查看源代碼和網(wǎng)絡(luò)請(qǐng)求, 嘆了一口氣說(shuō): “原來(lái)的辦法都不管用了,這些網(wǎng)站都在用JavaScript在瀏覽器端渲染了!”

不過(guò)他接著又興奮地說(shuō):“這也許是一件好事情,這些JavaScript通過(guò)AJAX的方式訪問(wèn)后端網(wǎng)站的API,返回的數(shù)據(jù)都是JSON,我分析下,只要弄清楚這些API的輸入和輸出, 直接調(diào)用API就可以拿到數(shù)據(jù)了。”

其實(shí)都是分析,只不過(guò)原來(lái)分析HTML結(jié)構(gòu),從中取出內(nèi)容,現(xiàn)在是分析后端服務(wù)器提供的API,直接獲取到了數(shù)據(jù),似乎更加方便。

但時(shí)候直接調(diào)用這些API也是有點(diǎn)小麻煩,比如很多時(shí)候,都需要進(jìn)行認(rèn)證,比如發(fā)個(gè)token什么的給服務(wù)器,要不然人家就不讓調(diào)用。

后來(lái)主人說(shuō),算了,實(shí)在是麻煩,我給我的爬蟲升級(jí)下裝備吧。

新裝備其實(shí)就是一個(gè)內(nèi)嵌的瀏覽器,這個(gè)瀏覽器不需要界面顯示, 可以在程序中靜悄悄地執(zhí)行,主人把他叫做無(wú)界面瀏覽器,或者無(wú)頭瀏覽器。

(碼農(nóng)翻身注: 例如selenium,phantomjs等)

有了全功能的內(nèi)嵌瀏覽器,相當(dāng)于一個(gè)真正的人類在請(qǐng)求網(wǎng)頁(yè)了,把JavaScript下載下來(lái),不是要在瀏覽器中做渲染嗎?等的就是你! 管你什么AJAX, token ,加密, 這里統(tǒng)統(tǒng)可以執(zhí)行。

這個(gè)無(wú)頭瀏覽器渲染完以后,我就可以拿到HTML做后續(xù)的分析了。

一切盡在掌握,這種感覺實(shí)在美妙。

不過(guò)缺點(diǎn)也是有的: 慢! 沒辦法,有得必有失嘛, 我們還可以采用分布式運(yùn)行的利器,多跑一些爬蟲的實(shí)例,人多力量大。

總結(jié)

我們爬蟲界的終極目標(biāo)就是和人類的行為保持一致,這樣就網(wǎng)站就無(wú)法識(shí)別了,只不過(guò)路漫漫其修遠(yuǎn)兮,雙方的爭(zhēng)斗估計(jì)會(huì)一直持續(xù)下去。

 

在斗爭(zhēng)中,建議大家遵循一個(gè)原則:“斗而不破”, 不能砸網(wǎng)站的飯碗,要不然人家一怒之下把功能下線了,那大家徹底玩完。 

責(zé)任編輯:龐桂玉 來(lái)源: 碼農(nóng)翻身
相關(guān)推薦

2015-09-01 09:53:04

Java Web開發(fā)者

2022-03-07 05:53:41

線程CPU代碼

2015-01-19 09:54:03

Linus

2013-05-21 09:32:11

ChromebookChrome OS

2012-11-28 13:25:27

程序員

2014-11-25 14:04:59

DockerDocker Nodeweb應(yīng)用部署

2009-08-04 10:22:20

Project Zer

2022-06-08 08:14:27

Dubbo數(shù)據(jù)包源代碼

2022-04-28 09:05:41

網(wǎng)絡(luò)爬蟲Python

2019-12-23 11:03:07

抽象MOVJava

2009-01-05 15:31:41

2024-01-22 11:06:47

系統(tǒng)后端開發(fā)

2024-02-26 07:51:08

業(yè)務(wù)系統(tǒng)迭代

2020-10-13 09:33:28

AI神經(jīng)元人類

2017-09-07 14:44:10

程序員

2009-08-06 16:25:28

云計(jì)算總舵主

2017-09-15 16:02:15

函數(shù)代碼CPU

2023-02-13 00:18:22

前端庫(kù)框架集合

2019-06-17 10:33:52

程序員培訓(xùn)班框架

2016-01-05 13:52:05

Kotlin掌握語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)