go語言網(wǎng)絡(luò)爬蟲教學(xué),go語言爬蟲框架

Go怎么能做到不需要“對象”就可以完成多態(tài)能做到的事?慕課網(wǎng)上線的新版Go語言有沒有提到這一點(diǎn)?

go嚴(yán)格上說沒有多態(tài),但可以利用接口進(jìn)行,對于都實(shí)現(xiàn)了同一接口的兩種對象,可以進(jìn)行類似地向上轉(zhuǎn)型,并且在此時可以對方法進(jìn)行多態(tài)路由分發(fā)。慕課網(wǎng)上線的新版Go語言不僅有提到這一點(diǎn),還提到了Go在不面對對象的情況下是怎么完成封裝和繼承的,老師講得很通透,搭配經(jīng)典算法、典型例題、微型項(xiàng)目深入講授go語言。然后還會教學(xué)員從零開始搭建分布式爬蟲系統(tǒng),學(xué)會用go語言處理復(fù)雜項(xiàng)目。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、余杭網(wǎng)站維護(hù)、網(wǎng)站推廣。

golang爬蟲框架colly

colly一款快速優(yōu)雅的golang爬蟲框架,簡單易用,功能完備。

官網(wǎng)地址:

包地址: import "github.com/gocolly/colly"

一個簡單的例子:

使用方式概括下來主要有三步:

創(chuàng)建采集器時可以指定一些配置參數(shù),如useragent,爬取深度及日志等

回調(diào)函數(shù)共有7中

通過瀏覽器開發(fā)者工具查看jianshu.com結(jié)構(gòu)如下

文章列表為ul標(biāo)簽,中間每一項(xiàng)是li標(biāo)簽,li中包含content,content中包含title,abstract和meta標(biāo)簽

Go語言的應(yīng)用

Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語言”。

Go語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語言。

Go語言應(yīng)用范圍:

1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;

2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);

3、網(wǎng)絡(luò)編程:大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;

4、Paas云平臺領(lǐng)域:Kubernetes和Docker Swarm等;

5、分布式存儲領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;

6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個明星項(xiàng)目以太坊和fabric都使用Go語言;

7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實(shí)現(xiàn)的;

8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。

Golang net/http 爬蟲[1]

上周從零學(xué)習(xí)了golang,語法簡單關(guān)鍵字少,寫個爬蟲熟悉一下語法結(jié)構(gòu)。

首先選用了原生的net/http包,基本上涵蓋了所有的get/post請求,各種參數(shù)都可以設(shè)置,網(wǎng)上google到html頁面解析goquery神器,很輕松就可以解決頁面解析問題。

首先就寫了個爬取匯率的爬蟲。然后重寫之前php的一個請求類,請求類的邏輯有點(diǎn)混亂不清晰,往往把兩個不同的功能合并到一起寫,粒度大,后來發(fā)現(xiàn)了一個好用的框架——colly,之后再試試好不好用

Windows 10 Golang

依賴包:goquery

較常用的方法有Find和Each

爬取中國銀行的匯率牌價表,golang依賴net/http包和goquery包

唯一的難點(diǎn)是對于goquery方法的使用,需要閱讀官方文檔:

使用原生的net/http包基本上可以解決大多數(shù)的網(wǎng)頁請求,使用goquery可以解決頁面解析問題

可以利用golang的協(xié)程特性進(jìn)行異步多協(xié)程爬取

增加安全性可以通過幾個方面進(jìn)行改進(jìn):

1.首先可以限制爬蟲的爬取速度

2.每次對網(wǎng)頁的請求都隨機(jī)選用一個客戶端

3.選用IP代理池,防止IP誤封(及限制ip訪問次數(shù))

構(gòu)造請求代理ip網(wǎng)站的鏈接→獲取網(wǎng)頁內(nèi)容→ 提取網(wǎng)頁中IP地址和端口號→驗(yàn)證IP的有效性并存儲

輕量級反爬蟲方案

淺談JSP

golang帶json的Http請求

Get/Post

HTTP請求中的Form Data和Request Payload的區(qū)別

HTTP Json請求

net/http:

golang HTTP操作

python建立爬蟲代理ip池

爬蟲黑科技之讓你的爬蟲程序更像人類用戶的行為

特點(diǎn):事件監(jiān)聽,通過callback執(zhí)行事件處理

基于colly開發(fā)的web管理界面

【網(wǎng)絡(luò)爬蟲教學(xué)】蟲師終極武器之Chromium定制開發(fā)系列(六)

Hi,大家好,歡迎大家觀看由IT貓之家打造的【網(wǎng)絡(luò)爬蟲教學(xué)】蟲師終極武器之Chromium定制開發(fā)系列教學(xué)文章的第六篇,如果您是第一次觀看本系列教程,請先移步到 這里 看完前面的文章后再回來哦!大家在學(xué)習(xí)的過程中,有任何疑問可以留言或加入我們的QQ技術(shù)交流群進(jìn)行探討: 544185435

前言

前面我們已經(jīng)實(shí)現(xiàn)了多個FP重點(diǎn)檢測對象的接口隨機(jī)化,事實(shí)上只要完成這些接口的重寫就足以應(yīng)付大多網(wǎng)站了,不過我們既然要定制就做足全套吧,在FP檢測腳本中,尚且還有一些也算是較為重要的判斷依據(jù),如:系統(tǒng)字體檢測、瀏覽器插件(plugins) 檢測、以及非人為觸發(fā)事件檢測isTrusted等。

FontStyle 隨機(jī)化的實(shí)現(xiàn)

由于每臺設(shè)備的字體可能存在差異等原因使得第三方服務(wù)可以輕松的通過獲取字體來判斷請求的客戶端是否為同一客戶端,我們知道Chromium為了規(guī)避安全的風(fēng)險,不對JS提供太多的可用權(quán)限,比如字體讀取,JS本不具備這種檢測權(quán)限,但FP巧妙的利用了字體的(長、寬、描邊)等屬性來精確的判斷出客戶端是否包含了哪些字體,最終導(dǎo)出一串哈希值以便于作為有力的憑證,另除了這種方式,F(xiàn)P還通過Flash接口來調(diào)用字體進(jìn)行判斷(需瀏覽器支持)

對于系統(tǒng)字體接口的隨機(jī),我們可以從傳入的font-Style著手,在之前的Canvas隨機(jī)方案中,我們有做過類似的操作,就直接篡改傳入的Style,而對于字體我們也是可以這么干的,只需將其替換成指定的字體即可。

要想實(shí)現(xiàn)該接口的隨機(jī)化,我們首先得要搞懂網(wǎng)站對這個接口的檢測是如何實(shí)現(xiàn)的以及它是如何運(yùn)作的,而最好最直接的方法就是直接從目標(biāo)網(wǎng)站分析并找到答案,我們可以打開 browserleaks ?然后在關(guān)鍵處下斷點(diǎn),從上圖我們可以看到它預(yù)設(shè)了一堆的常見字體。

從上圖,我們可以看到一串:mmm?▁????????mmmmmmmlli 這樣的字符,在我接觸過的腳本中它們都會以這種形式作為檢測的基準(zhǔn),至于為何一定要用這給字符串,大家可以參考下這篇文章,這位大佬已經(jīng)解釋得很清楚: JavaScript/CSS Font Detector | JavaScript / CSS 字體檢測器

從圖中我們可以看出,它每次循環(huán)都會通過接口style.fontFamily來為當(dāng)前標(biāo)簽設(shè)置字體并獲取其寬度與高度,進(jìn)而與原始的字體進(jìn)行一一比對,一旦不相等則表示該字體存在,通過該方法幾乎可以100%的測得準(zhǔn)確結(jié)果,而我們要想實(shí)現(xiàn)該接口的隨機(jī)化,可以考慮從兩個點(diǎn)著手,首先,就像前面說的,接口每次都會通過 style.fontFamily 來設(shè)置字體,那么我們完全可以在這里進(jìn)行篡改,只要保證每次傳入的字體都不一致,則表示肯定會與結(jié)果有出入從而達(dá)到了隨機(jī)化的目的,其二,既然它是通過字體的寬度與高度來判斷是否成立的,那么我們也可以hook該接口返回隨機(jī)偏移的數(shù)值,從而達(dá)到隨機(jī)化的目的。

通過API查詢,我們可以很方便的找到該接口的路徑,我們只需按自己的需求實(shí)現(xiàn)隨機(jī)化即可,在這,我建議大家直接修改它的頭文件,因?yàn)槲覈L試修改cc文件并未成功,當(dāng)然大家也可以自行嘗試,萬一是我操作姿勢不對呢,啊哈哈….

plugins 接口隨機(jī)化的實(shí)現(xiàn)

事實(shí)上,單單依賴這個插件指紋,服務(wù)端是無法判斷出是否同一客戶端的,也就是說只要完成前面的所有指紋偽造,基本上可以瞞天過海了,但為了滿足部分強(qiáng)迫癥的看官,我還是有必要將這個給拉出來講解了。

我們直接在控制臺中輸入:navigator.plugins,來看看這個插件到底包含了什么

我們可以看到,基本上 navigator.plugins 的子項(xiàng)包含了:四個字段以及2個對象(事實(shí)上是一個對象),而事實(shí)上我們?yōu)g覽器里的這個對象基本上都是一樣的,所以我開頭說可以忽略掉這個接口,我們可以查看每個子項(xiàng),可以發(fā)現(xiàn)它的字段是一樣的,同樣包含了: name、 filename 、 description 、 MimeType ;那么這樣就好辦了,直接從以上的字段著手即可。

通過API查詢,我們定位到這個 navigator.plugins 的接口位于:third_party\blink\renderer\modules\plugins目錄下,我們只需對其實(shí)現(xiàn)隨機(jī)化即可。

上圖是插件隨機(jī)化后的效果,經(jīng)過篡改:String DOMPlugin::name()、String DOMPlugin::filename()、String DOMPlugin::description()我們可以很輕松的便實(shí)現(xiàn)了該接口的隨機(jī)化。

接口事件觸發(fā)之底層篡改大法

在FP腳本檢測的過程中,還有一項(xiàng)作為檢測最為重要的評判指標(biāo) “isTrusted”,之所以將它留到最后講,是為了體現(xiàn)它的價值與其重要性,該字段通常會出現(xiàn)在事件被觸發(fā)的時,它也是唯一的一個不可直接通過JS語法進(jìn)行篡改的字段,也就是說前面介紹的所有接口其實(shí)我們都是可以通過JS去篡改的,(篡改是沒問題,但不見得一定能用,因?yàn)椴糠志W(wǎng)站是有針對這個進(jìn)行檢測的),而這個 “isTrusted ”則是例外。

我們來看看上圖,我們隨便定義了一個鼠標(biāo)事件以及坐標(biāo)的事件,然后我們可以發(fā)現(xiàn),它們都攜帶了一個“ isTrusted ”的字段,并且它的值為false,通過上圖我們可以發(fā)現(xiàn),這個接口并不能重寫,因?yàn)樗侵蛔x的,覆蓋不了,而我也有嘗試過在茫茫網(wǎng)海中尋找可通過JS改寫的方案,最終都以失敗告終,當(dāng)然,也有老外告訴我,它們可以通過配合擴(kuò)展插件去實(shí)現(xiàn),但必須得借助debugger來實(shí)現(xiàn),并且無法取消彈窗,而這方法我也嘗試過,是成功了,但是及其耗資源,所以我才打算將其以基于底層的方式實(shí)現(xiàn)。

我們再來看看真實(shí)觸發(fā)事件的情況,我們從上圖中可以看出,當(dāng)我們以真實(shí)鼠標(biāo)去觸發(fā)它, “ isTrusted ” 是為真的,而部分網(wǎng)站以該字段作為判斷的依舊,從而判斷你是否為機(jī)器人;事實(shí)上這個接口并不屬于是否同一客戶端的判斷范疇,而是為了校驗(yàn)客戶端是否人為發(fā)起的請求。

Event 接口的isTrusted是一個 Boolean 類型的只讀屬性.當(dāng)事件由用戶操作生成時為true,由腳本創(chuàng)建或修改,或通過調(diào)用 EventTarget.dispatchEvent 生成,為false;從這里我們可以看到通過腳本創(chuàng)建或者修改的都會返回false,從而我們可以更加肯定這個字段是肯定會被網(wǎng)站作為重要的判斷依舊的。

通過API我們順藤摸瓜的找到了接口的路徑,并將其篡改為true,而,因?yàn)樗械氖录ㄈ纾篗ouseEvent、PointEvent) 都是派生與event ,所以一旦在其根源修改了,所有的事件都勢必會返回真,從而達(dá)到我們想要的目的。

最后,附上一張篡改后的效果圖,以表示成功。

作者寄語

感謝大家一直閱讀本系列文章,到本文為止,我們已經(jīng)實(shí)現(xiàn)了FP里的大部分檢測,而通過這些屬性的偽造,我們已經(jīng)可以在大部分網(wǎng)站上執(zhí)行了,而由于接口都是隨機(jī)的,所以網(wǎng)站無法確認(rèn)是否為同一客戶端,從而達(dá)到了真正的匿名效果;但部分網(wǎng)站還是采用的Cookie形式來記錄的,所以,我們也可以通過隱身模式或者通過第三方擴(kuò)展來屏蔽。另外,請大家不要再私下問我怎么不完全把接口暴露出來,之類的話,首先,一旦方法暴露,勢必會遭到第三方網(wǎng)站進(jìn)行特征收集,沒有什么是絕對的,收集過多的數(shù)據(jù),照樣可以判斷你是機(jī)器人,或者直接屏蔽你的瀏覽器,其二,研究是需要時間與精力的,如果大家都是抱著做伸手黨的心思來討要結(jié)果,那么您可能找錯方向了,天天研究頭發(fā)都白了,你伸下手就想要,有這么好的事歡迎留言告訴我,我也想要;最后如果大家有業(yè)務(wù)需求可以找我合作,JS逆向或?yàn)g覽器定制均可。

如何一步一步學(xué)習(xí)到網(wǎng)絡(luò)爬蟲技術(shù)?

作為零基礎(chǔ)的你,我想你可能是想解決工作中的一個實(shí)際問題,或者僅僅是很想學(xué)習(xí)一下爬蟲的技術(shù),多一技之長。其實(shí)我準(zhǔn)備開始學(xué) Python 爬蟲的時候也是一樣,老板派了任務(wù),暫時沒有人會爬蟲,我只有自學(xué)頂硬上。因此,我可以用思維圖給你理清楚,你應(yīng)該干什么。

我零基礎(chǔ)但我想學(xué)網(wǎng)絡(luò)爬蟲:

路徑1:我不想寫代碼,Excel/八爪魚,用這些工具的好處是你可以很快上手,但是只能爬一些簡單的網(wǎng)站,一旦網(wǎng)站出現(xiàn)限制,這些方法就是個玩具。因此,想弄點(diǎn)數(shù)據(jù)玩玩,玩這些玩具就好。

路徑2:我可以學(xué)寫代碼,但是會不會很難???我以我的經(jīng)驗(yàn)告訴你,找一個好的老師比自我胡思亂想,自我設(shè)限好得多。寫代碼這個事不難學(xué),這也是為什么市面上有那么多代碼速成的教學(xué)。這也是為什么我有些同學(xué)1年轉(zhuǎn)專業(yè)進(jìn) Google 的事情發(fā)生。

這里給你描畫一下你的學(xué)習(xí)之路:

學(xué)會 Python 的基本代碼: 假如你沒有任何編程基礎(chǔ),時間可能花1-2周,每天3小時。假設(shè)你有編程基礎(chǔ)(VBA 也算吧),1小時。

理解爬蟲原理:5分鐘。為什么這么重要?我自認(rèn)為學(xué)一個東西就像建大樓,先弄清楚大框架,然后再從地基學(xué)起。很多時候我們的學(xué)習(xí)是,還沒弄懂大框架,就直接看網(wǎng)上的碎片化的教學(xué),或者是跟著網(wǎng)上教學(xué)一章一章學(xué),很容易學(xué)了芝麻丟了西瓜。我的自學(xué)就在這上面走了很多彎路。

應(yīng)用爬蟲原理做一個簡單爬蟲:30分鐘。

先吃透獲取網(wǎng)頁:就是給一個網(wǎng)址發(fā)個請求,那么該網(wǎng)址會返回整個網(wǎng)頁的數(shù)據(jù)。類似:你在瀏覽器鍵入網(wǎng)址,回車,然后你就看到了網(wǎng)站的整個頁面。

再吃透解析網(wǎng)頁:就是從整個網(wǎng)頁的數(shù)據(jù)中提取你想要的數(shù)據(jù)。類似:你在瀏覽器中看到網(wǎng)站的整個頁面,但是你想找到產(chǎn)品的價格,價格就是你想要的數(shù)據(jù)。

再學(xué)會儲存數(shù)據(jù):存儲很簡單,就是把數(shù)據(jù)存下來。

學(xué)會這些之后,你可以出去和別人說,我會 Python 爬蟲,我想也沒有人質(zhì)疑你了。那么學(xué)完這一套下來,你的時間成本是多少呢?如果你有編程基礎(chǔ)的話,1周吧。

所以,你是想當(dāng)爬蟲做個玩具玩玩,還是掌握一門實(shí)戰(zhàn)利器。我覺得你可以自己衡量一下。

本文題目:go語言網(wǎng)絡(luò)爬蟲教學(xué),go語言爬蟲框架
網(wǎng)址分享:http://muchs.cn/article12/hcjsgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、定制開發(fā)、網(wǎng)站設(shè)計(jì)手機(jī)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)