因?yàn)榻柚鶫TTP協(xié)議,我可以通過(guò)全球全部的website和瀏覽器獲取我想要的數(shù)據(jù)。而我要加裝自己是一個(gè)瀏覽器,向server發(fā)送HTTP請(qǐng)求,進(jìn)而請(qǐng)求到網(wǎng)頁(yè)文件。之后按照HTML的格式規(guī)范解析其中的圖片、鏈接、表單,獲得我感興趣的內(nèi)容。
得到鏈接標(biāo)簽之后,我會(huì)進(jìn)一步爬取鏈接背后的內(nèi)容,這樣往復(fù),用不了多長(zhǎng)時(shí)間,我就能爬完這個(gè)站點(diǎn)中開(kāi)放出來(lái)的所有內(nèi)容。
都說(shuō)盜亦有道,當(dāng)然了,咱們爬蟲(chóng)也有底線。在我們這一行混,必須遵守一個(gè)規(guī)矩——Robots協(xié)議。robots.txt的文件被放在網(wǎng)站的根目錄下充當(dāng)門(mén)神,里面寫(xiě)上哪些目錄禁止訪問(wèn),爬蟲(chóng)就會(huì)繞道而行,robots里面的內(nèi)容長(zhǎng)這樣:
User-agent: *
Disallow: /a/
Disallow: /b/
Disallow: /c/
如果你以為只有在程序員之間存在鄙視鏈,那你就錯(cuò)了,實(shí)際上他們的作品之間也存在鄙視鏈。
在這個(gè)星球上大佬級(jí)別的爬蟲(chóng)當(dāng)屬谷歌搜索引擎,當(dāng)它想要爬取什么內(nèi)容的時(shí)候全球所有網(wǎng)站都巴不得被爬取。全球幾乎所有的網(wǎng)站都想被收錄到搜索引擎的花名冊(cè),進(jìn)而自己的網(wǎng)站可以被廣大網(wǎng)民搜索到。
當(dāng)然總有一些不法爬蟲(chóng),有一些爬蟲(chóng)不遵守robots協(xié)議,隨意亂爬,一天天只知道爬美女圖片,把人家server都爬崩潰了。
但是像我這樣老實(shí)本分的爬蟲(chóng),日常就是爬取一些網(wǎng)站數(shù)據(jù),比如購(gòu)物網(wǎng)站、點(diǎn)評(píng)網(wǎng)站。但這些網(wǎng)站也不待見(jiàn)我們。
為了爬到數(shù)據(jù),我們與網(wǎng)站之間一直在對(duì)峙。
再說(shuō)說(shuō)反爬蟲(chóng)
那些網(wǎng)站不待見(jiàn)咱們這些爬蟲(chóng)是因?yàn)樾奶圩约旱木W(wǎng)絡(luò)帶寬。
況且,我們不像搜索引擎爬蟲(chóng)可以給他們的網(wǎng)站帶來(lái)流量,卻會(huì)占用他們的服務(wù)器一部分性能,占據(jù)他們珍貴的流量,那些可都是雪花銀,想想就揪心???
這些網(wǎng)站為了對(duì)付我們,采取了一個(gè)措施:在HTTP請(qǐng)求中的user-agent字段識(shí)別出這是爬蟲(chóng),就不會(huì)理睬我們了。user-agent是HTTP協(xié)議中用來(lái)代表客戶端名字的一個(gè)字段。在我剛?cè)胄袝r(shí)沒(méi)什么經(jīng)驗(yàn),就經(jīng)常被識(shí)破。
最后我只能換一身行頭,冒充瀏覽器,更有甚者圈子里有個(gè)兄弟冒充搜索引擎,我不會(huì)像他那么沒(méi)有底線。
沒(méi)多久這招就失靈了,那些網(wǎng)站升級(jí)了策略,通過(guò)我們的行為來(lái)識(shí)別是不是真的瀏覽器。我們畢竟是程序,那速度比人類(lèi)點(diǎn)擊快多了,如果網(wǎng)站發(fā)現(xiàn)我們?cè)诙虝r(shí)間內(nèi)發(fā)起了居多請(qǐng)求,那就掐斷連接。被逼無(wú)奈,我只好降低爬取的頻率。
在江湖漂,難免要挨刀,有些網(wǎng)站會(huì)設(shè)下陷阱,靜靜等候我們這些爬蟲(chóng)到來(lái)。他們?cè)诰W(wǎng)頁(yè)里面放上一些假的圖片作為誘餌,實(shí)際上可能是只有幾個(gè)像素、肉眼無(wú)法識(shí)別的假圖片,但是我們不知道啊,對(duì)我來(lái)說(shuō)只要是《img》標(biāo)簽就是圖片。記得,有一次我一訪問(wèn)就中計(jì)了,立刻被拉入黑名單!
上次栽了跟頭,但我沒(méi)有退縮,翻越高墻,出來(lái)后我要變得更強(qiáng)大。
聽(tīng)說(shuō)圈子里有些大佬用上了分布式技術(shù),組團(tuán)去爬,很多個(gè)IP地址,其中一個(gè)或者幾個(gè)封了也不用怕,我真是很羨慕。慕名而去,我學(xué)會(huì)了這項(xiàng)本領(lǐng),黑夜看到了我猙獰的笑。
前端后端
在我的爬蟲(chóng)生涯中遇到過(guò)一些奇怪的網(wǎng)站,網(wǎng)頁(yè)中有數(shù)據(jù),但是訪問(wèn)拿到的HTML中啥也沒(méi)有。
原來(lái)這種網(wǎng)站用了前后端分離開(kāi)發(fā)的技術(shù)。數(shù)據(jù)是瀏覽器通過(guò)單獨(dú)的API接口拿到后再動(dòng)態(tài)加載出來(lái),而不是渲染到網(wǎng)頁(yè)中,難怪我拿到的只是一個(gè)空殼子。
為了拿到數(shù)據(jù),我只好也學(xué)著去請(qǐng)求這些數(shù)據(jù)接口,不過(guò)因?yàn)檫@些網(wǎng)站都有API網(wǎng)關(guān),會(huì)檢查請(qǐng)求的Token或者Authorization之類(lèi)的認(rèn)證字段,再加上我不知道他們的接口參數(shù)格式,導(dǎo)致我經(jīng)常拿不到數(shù)據(jù)。直到最近兩年,我拿到的網(wǎng)頁(yè)HTML越來(lái)越簡(jiǎn)單了,在瀏覽器中豐富多彩的頁(yè)面,一查看源代碼竟然只有簡(jiǎn)單幾行,真是見(jiàn)了鬼了!
有一天,一個(gè)前輩告訴我,現(xiàn)在流行單頁(yè)應(yīng)用SPA了,頁(yè)面全都是在前端動(dòng)態(tài)生成的,拿到的HTML根本沒(méi)有價(jià)值。這簡(jiǎn)直欺人太甚了!
沒(méi)辦法了,我決定變成一個(gè)真正的瀏覽器。
這個(gè)內(nèi)嵌的瀏覽器沒(méi)有界面,專(zhuān)門(mén)為我服務(wù),嵌入到我的程序中,讓他去真正地渲染網(wǎng)頁(yè),渲染完成后我再去取數(shù)據(jù)。這是真正意義上模擬人類(lèi)去訪問(wèn)網(wǎng)站了,再也不用模擬繁瑣的數(shù)據(jù)接口訪問(wèn),也不用擔(dān)心單頁(yè)應(yīng)用,前端渲染就前端渲染,我再也不怕了!
難搞的驗(yàn)證碼
到后來(lái),不知道是誰(shuí)發(fā)明的,網(wǎng)站們紛紛用上了一種叫驗(yàn)證碼的技術(shù),給我們出了難題。開(kāi)始的驗(yàn)證碼一般都是些簡(jiǎn)單的數(shù)字、英文字符做了些變形,就像這樣:
江湖上很快有大佬教我用文字識(shí)別技術(shù)OCR來(lái)自動(dòng)識(shí)別這種驗(yàn)證碼,我也折騰了一下,費(fèi)了老大勁終于可以識(shí)別出來(lái),準(zhǔn)確率不敢說(shuō)100%,99%還是有的。
沒(méi)多久這驗(yàn)證碼就變得越來(lái)越復(fù)雜,什么漢字識(shí)別,物體識(shí)別,滑動(dòng)解鎖,一個(gè)比一個(gè)難,像是簡(jiǎn)單的小游戲。你瞧瞧下面這些驗(yàn)證碼,這不是故意為難爬蟲(chóng)嗎?
這些網(wǎng)站的反爬蟲(chóng)技術(shù)越來(lái)越先進(jìn),我們能發(fā)揮的空間被一步步擠壓。內(nèi)憂外患不斷,不少爬蟲(chóng)兄弟失業(yè)的失業(yè),轉(zhuǎn)行的轉(zhuǎn)行,爬蟲(chóng)這碗飯,真是越來(lái)越不好吃了。據(jù)說(shuō)有個(gè)愣頭青爬蟲(chóng)強(qiáng)行爬取一家公司的網(wǎng)站,最后把人公司server給爬崩潰了,他還被抓了起來(lái)。
責(zé)任編輯人:CC
-
爬蟲(chóng)
+關(guān)注
關(guān)注
0文章
83瀏覽量
7361
原文標(biāo)題:詳解什么是爬蟲(chóng)?
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Python數(shù)據(jù)爬蟲(chóng)學(xué)習(xí)內(nèi)容
爬蟲(chóng)可以采集哪些數(shù)據(jù)
網(wǎng)絡(luò)爬蟲(chóng)之關(guān)于爬蟲(chóng)http代理的常見(jiàn)使用方式
網(wǎng)絡(luò)爬蟲(chóng)nodejs爬蟲(chóng)代理配置
Golang爬蟲(chóng)語(yǔ)言接入代理?
什么是爬蟲(chóng)?
如何運(yùn)行imdb爬蟲(chóng)?
0基礎(chǔ)入門(mén)Python爬蟲(chóng)實(shí)戰(zhàn)課
python網(wǎng)絡(luò)爬蟲(chóng)概述
labview實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)功能
python爬蟲(chóng)入門(mén)教程之python爬蟲(chóng)視頻教程分布式爬蟲(chóng)打造搜索引擎
爬蟲(chóng)是如何實(shí)現(xiàn)數(shù)據(jù)的獲取爬蟲(chóng)程序如何實(shí)現(xiàn)

網(wǎng)絡(luò)爬蟲(chóng)是否合法
Python爬蟲(chóng) 你真的會(huì)寫(xiě)爬蟲(chóng)嗎?

評(píng)論