三月它帶走了愛我的人!爬蟲逆與不逆如何選擇?
前言
在這個江湖
除了黑與白的攻防
還有爬與反爬之間的對決
轉眼已是四月,時間總是在不知覺中悄悄流逝,面對已經過去的三月,含淚說一聲再見。最近很長一段時間沒有更新任何動態,淚咽卻無聲!三月它帶走了很多東西,它也帶走了最愛我的人。講實話最近心裡總是充滿著失落、無力感,沒有心思做任何事情。有時感嘆意外為何總是來的這麼突然、那麼毫無徵兆!既然三月的風沒有吹散霧霾,那麼就讓四月的陽光灑滿大地吧…
1. 感謝有你
其實這一篇文章在3月下旬就應該完成釋出出來的,當時主要也是想寫一寫逆向相關領域的一些東西,依稀記得那天下午我寫到結尾的時候,接到了一個讓我為之一顫的電話,這個惡耗打破了我寧靜的生活,瞬間讓我的大腦一片空白!立馬從北京趕回到了我的家鄉湖南,直到最近才慢慢處理好忙碌的事務。那晚,我記得我在深夜發了一條Blink,直到今天上來看才發現很多朋友給我的評論留言。看到你們字語中的鼓勵,在這個春天裡,沒有什麼能比這些更暖了!
2. 爬蟲逆向那點事
在爬蟲這個領域內,現在很多招爬蟲職位的企業招聘要求上多少都會帶上點逆向的東西,其實企業它招一個爬蟲工程師進去了也並是一定要強制讓你用逆向大法去解決某個網站的反爬機制!還有就是爬蟲這個職業不掌握逆向相關的技術棧它就無法在這個行業立足或者說在這個行業找到一份合適的工作了嗎?答案肯定是否定的!但是,擁有逆向能力及經驗的爬蟲工程師在這個領域所擁有的核心競爭力還是很強的
其實我們都知道爬蟲入門是一個非常低門檻的事!早個幾年如果會用Selenium或者能處理一個滑動驗證碼那都是算強的了!那個時候一名爬蟲工程師從入門到上崗我見過很多自學兩三個月到找到工作的。依稀記得當年在這個圈子裡,幾個志同道合的老友聚在一起經常會討論一些關於滑動驗證碼、吐槽一下某某站BT的反爬機制等相關的一些話題。可是慢慢隨著時代的進步、科技的發展,資料還是那些資料,站還是那個站,但是在這個坑裡的人頭髮肉眼可見的日漸稀少
不知道大家有沒有看過一些修仙類的小說。爬蟲這個職業就好比那些修仙類小說裡的段位劃分一樣
現在很多企業它們招爬蟲這個職位的目的是到底是幹嘛呢?當然也許可能也會是某個老闆心血來潮想讓HR幫他找一個能給他爬電影、妹子圖片看的爬蟲工程師,越是利益所在的地方,就越是佈滿了爬蟲!這十年爬蟲行業造就了無數個新秀企業,我早前在網站看到一個這樣的例子前有這麼一個團隊他們希望通過商品資訊的不對稱性,做中間貿易。先後向多個電商平臺放出大量爬蟲,主要獲取一些熱銷的產品、價格變化、評價等資訊。最後做投放,期間不斷對爬蟲進行優化、迭代以及標籤屬性化,現已是知名跨境DS服務品牌。所以爬蟲可以很直觀的讓我們看到企業在商業環境中,資料的威力!它無論是在輿情、採購、銷售、市場、供應鏈、客戶分析…都發揮了很大的作用!
當然,只有爬蟲還是遠遠不夠的,爬蟲只是一個工具,而企業需要的是一個體系,這個體系包含了資料獲取、資料清洗與治理、資料分析、資料應用、監控和安全、演算法優化、規則調優等等一系列的工作…
爬蟲這個職業個人來講的話,它的綜合知識體系涉獵還是相對比較廣的。一個優秀的爬蟲開發人員手裡握著一張佈滿技術棧的大網,這張網它包括但不限於:網路、語言基礎、前後端知識、網路安全、數分、數挖以及逆向工程…
正所謂爬蟲入門簡單!市面上關於爬蟲領域的質量慢慢正在變低。很多所謂的說起來很高階的“爬蟲工程師”解決一些Ajax載入的網站,想都不會想直接都是拿著自動化測試工具配合IP池一頓狂懟。還有一些套路可能都知道!比如JS斷點除錯、某個引數全域性Control+F、可以快速的讓給我們找到解決方法及思路,對於新手進階也是一種進步,但是對於高階一些的工程師或者有經驗的爬蟲人員來講就顯得有些雞肋了
在這個爬蟲盛行的時代中為了有足夠的能力可與之抗衡,網站方不得不採取任何可行的手段用以防止一切非人為操作篼集資料行為的工作,而在此時,加密、混淆便順勢成了一時之間熱門的話題。有時候我個人也在各個平臺、站點搜一些爬蟲JS、APP逆向相關的視訊及資料。發現很多不同的視訊、資料都是圍繞某一個知識點來炒剩飯!甚至還有一些培訓JG甚至拿著網上一些透明的東西來水課程。一些所謂做自媒體的公號各種搬運、互推、引流、出一些所謂的課程,然後就是收收萌新的智商稅…不是我吐槽,很多2~3年的爬蟲工程師簡歷上寫著熟悉這個、那個…真正到了說說底層實現原理、利弊、應用場景…深究一下基本就…
不管是現在還是未來WEB、APP應用只會越來越安全,反之企業招聘的要求也會越來越高。我們爬蟲工程師對於逆向技術的認知與掌握那是趨勢也將是必然的。只有這樣,我們在自己的同行領域內擁有核心的競爭力。而企業它們在招人對這一點的要求也間接的能過濾掉很大一部分人。隨著開源的爬蟲平臺跟一些優秀的工具浮現出市場如果企業招人大部分還是不再像以前單純的只是寫寫parse
而在反爬蟲中,當前很多有價值、高訪問的網站都會採用JavaScript來做反爬,問為什麼?因為它靠譜!
當然,可以模擬JavaScript,抓取動態網頁,這只是一個很簡單的功能。因為,如果對方沒有反爬蟲,你完全可以直接抓ajax本身, 而無需關心js怎麼處理的。如果對方有反爬蟲,那麼javascript必然十分複雜,重點在於分析, 而不僅僅是簡單的模擬!這只是基反爬的基本功,像JS反爬中一些經常讓你掉頭髮的操作:
eval----臭名昭著、效率低下、可讀性糟糕
goto----js支援很糟糕、需單獨實現
混淆----目前的minify工具通常是minify成abcd之類簡單的名字,有時候對方minify成阿拉伯語!因為阿拉伯語有時從左向右寫,有的時候是從右向左寫,還有的時候是從下向上寫。除非爬蟲方僱個阿拉伯程式設計師, 否則非頭疼死不可!
蜜罐資料----通過更改地址,讓爬蟲採集到錯誤資料!但是隻要爬蟲開發人員針對性的來掃,還是十分容易被檢測出來的
做爬蟲就註定著要走上反反爬的這條道路,在我們職業生涯中走過最長的路,就是反爬的套路。之前我碰到一個網站,它是一個國外的航空網站vietjetair這個網站的Cookies是動態加密的,按照一貫基本的套路使用全域性搜尋大法、再通過Mouse斷點除錯大法…均無法正確命中斷點,換句話說,就是根本無法找到入口。因為這個網站當我們輸入起始地-目的地點選搜尋跳轉的同時已經將加密的那部分程式碼移除掉了!這個時候我怎麼知道Cookies裡面的引數加密是如何實現的?要說大海撈針倒還有一絲希望,可是這個針它不在大海里!
任何除錯方法都不是萬能的!它僅僅只是一種處理方式,在很多時候,我們可能會為一個引數、一個加密費勁心機去找尋一個入口。這個過程可能需要花費大量的時間去除錯、失敗、除錯、再失敗、再除錯,這個過程會懷疑人生
做技術嘛!尤其是反爬技術,很多時候難免會觸及我們的知識盲區。俗話說得好:大路不通繞小路、小路不通淌水路、條條大路通羅馬。如今發達的網路資源它總能讓我們在絕望中尋求到一絲契機。
如上問題!對於Cookies做了手腳的這類操作我們可以使用自定義鉤子函式來監聽Cookie介面資訊的收發、結合Chrome extension實現資訊中斷與攔截機制。實現方式還是非常簡單的
var code = function(){
var org = document.cookie.__lookupSetter__('cookie');
document.__defineSetter__("cookie",function(cookie){
if(cookie.indexOf('關鍵引數')>-1){
debugger;
}
org = cookie;
});
document.__defineGetter__("cookie",function(){return org;});
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
程式碼中關鍵引數正是所被加密的引數當攔截發現到該引數則會直接攔截中斷。當然我們的鉤子函式編寫完以後還需要一個檔案用來宣告Chrome extension
{
"content_scripts": [ {
"js": [ "inject.js"],
"matches": [ "http://*/*", "https://*/*","<all_urls>"]
} ],
"manifest_version": 2,
"name": "CookieHook",
"permissions": ["tabs"],
"version": "0.1"
}
最後將兩個檔案統一放到一個資料夾,進入到Chrome擴充套件程式中將寫好的鉤子函式檔案新增到進去
啟用這個擴充套件外掛進而可以幫助你捕獲到你想要捕獲的加密資料以及快速尋找切入口。
反反爬這條路你確定要一條道走到黑嗎?
致謝
好了,到這裡又到了跟大家說再見的時候了。我只是一個會寫爬蟲的段子手而已,一個希望有朝一日能夠實現財富自由,能夠早日榮歸故里的遊子罷了。希望我的文章能帶給您知識,帶給您幫助,帶給您歡笑!同時也謝謝您能抽出寶貴的時間閱讀,創作不易,如果您喜歡的話,點個贊再走吧。您的支援是我創作的動力,希望今後能帶給大家更多優質的文章
相關文章
- 如何選擇爬蟲工具?爬蟲
- python爬蟲之抓取小說(逆天邪神)Python爬蟲
- 爬蟲代理IP產品如何選擇爬蟲
- Python爬蟲之CSS選擇器Python爬蟲CSS
- 如何逆轉血管老化?
- 為什麼選擇Python做爬蟲Python爬蟲
- 爬蟲中資料清洗的選擇爬蟲
- 愛奇藝接連“踩雷”,2020年躲不開的水逆期?
- 為什麼爬蟲要選擇住宅代理?爬蟲
- 逆戰
- 《逆轉裁判1》關卡設計:你的選擇是無效的
- 談戀愛不如學習!如何選擇Python與Java?PythonJava
- 康佳的“順勢”與“逆商”
- 每日爬蟲JS小逆之5分鐘旅遊網MD5一鍋端爬蟲JS
- .NET C#雜談(1):變體 - 協變、逆變與不變C#
- 通用爬蟲與聚焦爬蟲爬蟲
- Java中的逆變與協變Java
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- 為什麼很多人入門選擇Python爬蟲?Python爬蟲
- 為什麼爬蟲語言選擇Python而不是Java?爬蟲PythonJava
- 矩陣求逆矩陣
- 為什麼運維管理皮膚我只選擇它?運維
- 菜鳥變大神,測試人才的逆襲之路就靠它了!
- EXCEL你“不講武德”!這個功能逆天到爆Excel
- 逆波蘭表示式求值——棧與佇列佇列
- 什麼是爬蟲?學習Python爬蟲難不難?爬蟲Python
- Linux運維管理皮膚為什麼我只選擇它?Linux運維
- break、continue、return中選擇一個,我們結束掉它
- 當我遇到了爬蟲爬蟲
- websocket與爬蟲Web爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- 爬蟲與反爬蟲技術簡介爬蟲
- 逆置連結串列
- 我去!爬蟲遇到字型反爬,哭了爬蟲
- 取代不了 C/C++ 的 Rust 如何“逆襲”?C++Rust
- python愛奇藝VIP視訊爬蟲爬取下載Python爬蟲
- 盤點爬蟲語言為何大多選擇Python而不是Java爬蟲PythonJava
- 我爬取了爬蟲崗位薪資,分析後發現爬蟲真香爬蟲