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