投稿:爬蟲工程師的日常

來(lái)源 | 來(lái)日正長(zhǎng)
很多粉絲對(duì)爬蟲還是比較感興趣的,但是并不了解爬蟲工程師平常的工作,剛好有位做爬蟲的同學(xué)給豬哥投稿,今天就給大家安排上!
很多同學(xué)可能都不太清楚爬蟲是干什么的,今天我就來(lái)跟大家科普下爬蟲工程師平時(shí)的工作都是怎樣的。
說(shuō)起爬蟲,大家可能不太理解它的概念。但給大家舉個(gè)通俗易懂的例子,像百度、谷歌這些大型搜索引擎,你就可以把它們理解為一個(gè)巨大的爬蟲,它們無(wú)時(shí)無(wú)刻不在抓取著網(wǎng)上的所有信息,然后展示給用戶看。這種稱為通用網(wǎng)絡(luò)爬蟲。而爬蟲工程師更多干的是聚焦網(wǎng)絡(luò)爬蟲,是專門根據(jù)業(yè)務(wù)針對(duì)某些網(wǎng)站而制定的特定爬蟲程序,只需要獲取目標(biāo)網(wǎng)站的數(shù)據(jù)。
爬蟲又分為增量式爬蟲和全量式爬蟲。全量式爬蟲又稱為一次性爬蟲,就是把該網(wǎng)站的數(shù)據(jù)一次性全部抓取下來(lái),后面就不需要再管該網(wǎng)站了,這種爬蟲任務(wù)通常比較簡(jiǎn)單。而增量式爬蟲不止這次要把網(wǎng)站數(shù)據(jù)抓取下來(lái),而且之后還要檢測(cè)該網(wǎng)站有無(wú)數(shù)據(jù)更新,如果有更新的話還需要把更新后的數(shù)據(jù)再抓回到數(shù)據(jù)庫(kù)里。所以增量式爬蟲對(duì)于爬蟲程序的健壯性要求會(huì)更高些。
爬蟲工程師的目的就是獲取所需的數(shù)據(jù)。而主要難點(diǎn)就是獲取數(shù)據(jù)的過(guò)程中需要跟網(wǎng)站的各種反爬措施做斗爭(zhēng)。對(duì)于簡(jiǎn)單的網(wǎng)站,可能只是驗(yàn)證一下請(qǐng)求頭或者限制ip訪問(wèn)的頻率,這兩種可以通過(guò)構(gòu)造請(qǐng)求頭和購(gòu)買ip代理來(lái)解決。再?gòu)?fù)雜點(diǎn)就是url中會(huì)帶些關(guān)鍵參數(shù),而這些關(guān)鍵參數(shù)需要通過(guò)js逆向來(lái)破解出來(lái)參數(shù)是如何生成的,然后自己寫程序來(lái)構(gòu)造參數(shù)。更復(fù)雜的就是破解各類驗(yàn)證碼,破解驗(yàn)證碼如果自己不怕麻煩而且懂深度學(xué)習(xí)相關(guān)的知識(shí)的話,可以自己搭建相應(yīng)模型訓(xùn)練來(lái)進(jìn)行破解。如果想省事又效率高的話就可以直接通過(guò)網(wǎng)上的打碼平臺(tái)來(lái)輔助工作。
隨著移動(dòng)化時(shí)代的到來(lái),越來(lái)越多的數(shù)據(jù)逐漸從PC端轉(zhuǎn)移到了app端,所以爬蟲工程師如果想更精進(jìn)的話,也必須懂得app端數(shù)據(jù)的抓取。對(duì)于簡(jiǎn)單的app數(shù)據(jù)抓取,可以通過(guò)charles、fiddler等抓包工具來(lái)抓包分析,只要找到數(shù)據(jù)所在的地址,并且構(gòu)造合適的請(qǐng)求頭便可以得到。再?gòu)?fù)雜點(diǎn)的有些app數(shù)據(jù)需要破解關(guān)鍵參數(shù),而這些關(guān)鍵參數(shù)便需要通過(guò)app逆向來(lái)得到,需要用到AJAX、frida等逆向框架。
另外如果大家不想破解網(wǎng)站加密而且對(duì)爬蟲效率沒(méi)有那么高要求的話,可以試試自動(dòng)化模擬工具。所謂自動(dòng)化模擬,就是讓爬蟲完全像人一樣在操作,可以實(shí)現(xiàn)所見即所得的效果,功能非常強(qiáng)大。像PC端可以用selenium,app端可以用airtest,這里我只是簡(jiǎn)單列舉了兩個(gè)工具,還有很多其它好用的工具,各位可以選擇自己覺得順手的使用。
最后和大家說(shuō)下我平時(shí)接任務(wù)的流程,首先確定需求網(wǎng)站,然后確定需求的數(shù)據(jù),并且判定該任務(wù)是屬于全量式爬蟲還是增量式爬蟲。之后對(duì)需求網(wǎng)站進(jìn)行反爬機(jī)制的探索,并且制定相應(yīng)的反反爬措施。然后就開始搭建數(shù)據(jù)庫(kù)并編寫爬蟲程序爬取數(shù)據(jù)入庫(kù)。這只是簡(jiǎn)單的描述一下工作流程,當(dāng)然具體到每一步的話,可不是那么簡(jiǎn)單的。
我原來(lái)是以抓取文本數(shù)據(jù)為主,現(xiàn)在由于公司以及業(yè)務(wù)的變更,目前的爬取領(lǐng)域擴(kuò)展到了視頻、音頻、圖片等多領(lǐng)域,要說(shuō)難度的話,可能比原來(lái)的難度要稍微大一點(diǎn),因?yàn)橄褚曨l音頻這種文件不像文字可以直接存儲(chǔ)到數(shù)據(jù)庫(kù),這些我還需要自己進(jìn)行處理,然后存儲(chǔ)到oss上。不過(guò)只要能解決網(wǎng)站的反爬措施,其余的都不困難。
在我看來(lái),爬蟲與反爬就是矛與盾的較量。究竟是矛能攻破盾,還是盾能抵御矛。也許爬蟲工程師的樂(lè)趣就是在一次又一次的較量中得來(lái)的吧!
對(duì)于爬蟲這塊你還有其他要問(wèn)的嗎?歡迎留言!
