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