日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 通信技術(shù) > 通信網(wǎng)絡(luò)
[導(dǎo)讀] WeTest騰訊質(zhì)量開放平臺(tái)(wetest.qq.com),是由騰訊游戲官方推出的一站式游戲測試平臺(tái)。本著開放共贏的精神將騰訊游戲沉淀十余年,歷經(jīng)千款游戲錘煉的優(yōu)秀測試方案和工具,陸續(xù)開放給廣大

WeTest騰訊質(zhì)量開放平臺(tái)(wetest.qq.com),是由騰訊游戲官方推出的一站式游戲測試平臺(tái)。本著開放共贏的精神將騰訊游戲沉淀十余年,歷經(jīng)千款游戲錘煉的優(yōu)秀測試方案和工具,陸續(xù)開放給廣大游戲開發(fā)者,助力提高用戶的研發(fā)效率和產(chǎn)品品質(zhì)。

你被爬蟲侵?jǐn)_過么?當(dāng)你看到“爬蟲”兩個(gè)字的時(shí)候,是不是已經(jīng)有點(diǎn)血脈賁張的感覺了?千萬要忍耐,稍稍做點(diǎn)什么,就可以在名義上讓他們勝利,實(shí)際上讓他們受損失。

一、為什么要反爬蟲1. 爬蟲占總PV比例較高,這樣浪費(fèi)錢(尤其是三月份爬蟲)

三月份爬蟲是個(gè)什么概念呢?每年的三月份我們會(huì)迎接一次爬蟲高峰期。

最初我們百思不得其解。直到有一次,四月份的時(shí)候,我們刪除了一個(gè)url,然后有個(gè)爬蟲不斷的爬取url,導(dǎo)致大量報(bào)錯(cuò),測試開始找我們麻煩。我們只好特意為這個(gè)爬蟲發(fā)布了一次站點(diǎn),把刪除的url又恢復(fù)回去了。

但是當(dāng)時(shí)我們的一個(gè)組員表示很不服,說,我們不能干掉爬蟲,也就罷了,還要專門為它發(fā)布,這實(shí)在是太沒面子了。于是出了個(gè)主意,說:url可以上,但是,絕對不給真實(shí)數(shù)據(jù)。

于是我們就把一個(gè)靜態(tài)文件發(fā)布上去了。報(bào)錯(cuò)停止了,爬蟲沒有停止,也就是說對方并不知道東西都是假的。這個(gè)事情給了我們一個(gè)很大的啟示,也直接成了我們反爬蟲技術(shù)的核心:變更。

后來有個(gè)學(xué)生來申請實(shí)習(xí)。我們看了簡歷發(fā)現(xiàn)她爬過攜程。后來面試的時(shí)候確認(rèn)了下,果然她就是四月份害我們發(fā)布的那個(gè)家伙。不過因?yàn)槭莻€(gè)妹子,技術(shù)也不錯(cuò),后來就被我們招安了?,F(xiàn)在已經(jīng)快正式入職了。

后來我們一起討論的時(shí)候,她提到了,有大量的碩士在寫論文的時(shí)候會(huì)選擇爬取OTA數(shù)據(jù),并進(jìn)行輿情分析。因?yàn)槲逶路萁徽撐?,所以嘛,大家都是讀過書的,你們懂的,前期各種DotA,LOL,到了三月份了,來不及了,趕緊抓數(shù)據(jù),四月份分析一下,五月份交論文。

就是這么個(gè)節(jié)奏。

2. 公司可免費(fèi)查詢的資源被批量抓走,喪失競爭力,這樣少賺錢。

OTA的價(jià)格可以在非登錄狀態(tài)下直接被查詢,這個(gè)是底線。如果強(qiáng)制登陸,那么可以通過封殺賬號(hào)的方式讓對方付出代價(jià),這也是很多網(wǎng)站的做法。但是我們不能強(qiáng)制對方登錄。那么如果沒有反爬蟲,對方就可以批量復(fù)制我們的信息,我們的競爭力就會(huì)大大減少。

競爭對手可以抓到我們的價(jià)格,時(shí)間長了用戶就會(huì)知道,只需要去競爭對手那里就可以了,沒必要來攜程。這對我們是不利的。

3. 爬蟲是否涉嫌違法?如果是的話,是否可以起訴要求賠償?這樣可以賺錢。

這個(gè)問題我特意咨詢了法務(wù),最后發(fā)現(xiàn)這在國內(nèi)還是個(gè)擦邊球,就是有可能可以起訴成功,也可能完全無效。所以還是需要用技術(shù)手段來做最后的保障。

二、反什么樣的爬蟲1. 十分低級的應(yīng)屆畢業(yè)生

開頭我們提到的三月份爬蟲,就是一個(gè)十分明顯的例子。應(yīng)屆畢業(yè)生的爬蟲通常簡單粗暴,根本不管服務(wù)器壓力,加上人數(shù)不可預(yù)測,很容易把站點(diǎn)弄掛。

順便說下,通過爬攜程來獲取offer這條路已經(jīng)行不通了。因?yàn)槲覀兌贾?,第一個(gè)說漂亮女人像花的人,是天才。而第二個(gè)。。。你們懂的吧?

2. 十分低級的創(chuàng)業(yè)小公司

現(xiàn)在的創(chuàng)業(yè)公司越來越多,也不知道是被誰忽悠的然后大家創(chuàng)業(yè)了發(fā)現(xiàn)不知道干什么好,覺得大數(shù)據(jù)比較熱,就開始做大數(shù)據(jù)。

分析程序全寫差不多了,發(fā)現(xiàn)自己手頭沒有數(shù)據(jù)。

怎么辦?寫爬蟲爬埃于是就有了不計(jì)其數(shù)的小爬蟲,出于公司生死存亡的考慮,不斷爬取數(shù)據(jù)。

3. 不小心寫錯(cuò)了沒人去停止的失控小爬蟲

攜程上的點(diǎn)評有的時(shí)候可能高達(dá)60%的訪問量是爬蟲。我們已經(jīng)選擇直接封鎖了,它們依然孜孜不倦地爬齲

什么意思呢?就是說,他們根本爬不到任何數(shù)據(jù),除了httpcode是200以外,一切都是不對的,可是爬蟲依然不停止這個(gè)很可能就是一些托管在某些服務(wù)器上的小爬蟲,已經(jīng)無人認(rèn)領(lǐng)了,依然在辛勤地工作著。

4. 成型的商業(yè)對手

這個(gè)是最大的對手,他們有技術(shù),有錢,要什么有什么,如果和你死磕,你就只能硬著頭皮和他死磕。

5. 抽風(fēng)的搜索引擎

大家不要以為搜索引擎都是好人,他們也有抽風(fēng)的時(shí)候,而且一抽風(fēng)就會(huì)導(dǎo)致服務(wù)器性能下降,請求量跟網(wǎng)絡(luò)攻擊沒什么區(qū)別。

三。 什么是爬蟲和反爬蟲

因?yàn)榉磁老x暫時(shí)是個(gè)較新的領(lǐng)域,因此有些定義要自己下。我們內(nèi)部定義是這樣的:

爬蟲:使用任何技術(shù)手段,批量獲取網(wǎng)站信息的一種方式。關(guān)鍵在于批量。

反爬蟲:使用任何技術(shù)手段,阻止別人批量獲取自己網(wǎng)站信息的一種方式。關(guān)鍵也在于批量。

誤傷:在反爬蟲的過程中,錯(cuò)誤的將普通用戶識(shí)別為爬蟲。誤傷率高的反爬蟲策略,效果再好也不能用。

攔截:成功地阻止爬蟲訪問。這里會(huì)有攔截率的概念。通常來說,攔截率越高的反爬蟲策略,誤傷的可能性就越高。因此需要做個(gè)權(quán)衡。

資源:機(jī)器成本與人力成本的總和。

這里要切記,人力成本也是資源,而且比機(jī)器更重要。因?yàn)?,根?jù)摩爾定律,機(jī)器越來越便宜。而根據(jù)IT行業(yè)的發(fā)展趨勢,程序員工資越來越貴。因此,讓對方加班才是王道,機(jī)器成本并不是特別值錢。

四、知己知彼:如何編寫簡單爬蟲

要想做反爬蟲,我們首先需要知道如何寫個(gè)簡單的爬蟲。

目前網(wǎng)絡(luò)上搜索到的爬蟲資料十分有限,通常都只是給一段python代碼。python是一門很好的語言,但是用來針對有反爬蟲措施的站點(diǎn)做爬蟲,真的不是最優(yōu)選擇。

更諷刺的是,通常搜到的python爬蟲代碼都會(huì)使用一個(gè)lynx的user-agent。你們應(yīng)該怎么處理這個(gè)user-agent,就不用我來說了吧?

通常編寫爬蟲需要經(jīng)過這么幾個(gè)過程:

分析頁面請求格式

創(chuàng)建合適的http請求

批量發(fā)送http請求,獲取數(shù)據(jù)

舉個(gè)例子,直接查看攜程生產(chǎn)url。在詳情頁點(diǎn)擊“確定”按鈕,會(huì)加載價(jià)格。假設(shè)價(jià)格是你想要的,那么抓出網(wǎng)絡(luò)請求之后,哪個(gè)請求才是你想要的結(jié)果呢?

答案出乎意料的簡單,你只需要用根據(jù)網(wǎng)絡(luò)傳輸數(shù)據(jù)量進(jìn)行倒序排列即可。因?yàn)槠渌拿曰笮缘膗rl再多再復(fù)雜,開發(fā)人員也不會(huì)舍得加數(shù)據(jù)量給他。

五、知己知彼:如何編寫高級爬蟲

那么爬蟲進(jìn)階應(yīng)該如何做呢?通常所謂的進(jìn)階有以下幾種:

1. 分布式

通常會(huì)有一些教材告訴你,為了爬取效率,需要把爬蟲分布式部署到多臺(tái)機(jī)器上。這完全是騙人的。分布式唯一的作用是:防止對方封IP。封IP是終極手段,效果非常好,當(dāng)然,誤傷起用戶也是非常爽的。

2. 模擬JavaScript

有些教程會(huì)說,模擬javascript,抓取動(dòng)態(tài)網(wǎng)頁,是進(jìn)階技巧。但是其實(shí)這只是個(gè)很簡單的功能。因?yàn)?,如果對方?jīng)]有反爬蟲,你完全可以直接抓ajax本身,而無需關(guān)心js怎么處理的。如果對方有反爬蟲,那么javascript必然十分復(fù)雜,重點(diǎn)在于分析,而不僅僅是簡單的模擬。

換句話說:這應(yīng)該是基本功。

3. PhantomJs

這個(gè)是一個(gè)極端的例子。這個(gè)東西本意是用來做自動(dòng)測試的,結(jié)果因?yàn)樾Ч芎?,很多人拿來做爬蟲。但是這個(gè)東西有個(gè)硬傷,就是:效率。此外PhantomJs也是可以被抓到的,出于多方面原因,這里暫時(shí)不講。

六、不同級別爬蟲的優(yōu)缺點(diǎn)

越是低級的爬蟲,越容易被封鎖,但是性能好,成本低。越是高級的爬蟲,越難被封鎖,但是性能低,成本也越高。

當(dāng)成本高到一定程度,我們就可以無需再對爬蟲進(jìn)行封鎖。經(jīng)濟(jì)學(xué)上有個(gè)詞叫邊際效應(yīng)。付出成本高到一定程度,收益就不是很多了。

那么如果對雙方資源進(jìn)行對比,我們就會(huì)發(fā)現(xiàn),無條件跟對方死磕,是不劃算的。應(yīng)該有個(gè)黃金點(diǎn),超過這個(gè)點(diǎn),那就讓它爬好了。畢竟我們反爬蟲不是為了面子,而是為了商業(yè)因素。

七、如何設(shè)計(jì)一個(gè)反爬蟲系統(tǒng)(常規(guī)架構(gòu))

有個(gè)朋友曾經(jīng)給過我這樣一個(gè)架構(gòu):

對請求進(jìn)行預(yù)處理,便于識(shí)別;

識(shí)別是否是爬蟲;

針對識(shí)別結(jié)果,進(jìn)行適當(dāng)?shù)奶幚恚?/p>

當(dāng)時(shí)我覺得,聽起來似乎很有道理,不愧是架構(gòu),想法就是和我們不一樣。后來我們真正做起來反應(yīng)過來不對了。因?yàn)椋?/p>

如果能識(shí)別出爬蟲,哪還有那么多廢話?想怎么搞它就怎么搞它。如果識(shí)別不出來爬蟲,你對誰做適當(dāng)處理?

三句話里面有兩句是廢話,只有一句有用的,而且還沒給出具體實(shí)施方式。那么:這種架構(gòu)(師)有什么用?

因?yàn)楫?dāng)前存在一個(gè)架構(gòu)師崇拜問題,所以很多創(chuàng)業(yè)小公司以架構(gòu)師名義招開發(fā)。給出的TItle都是:初級架構(gòu)師,架構(gòu)師本身就是個(gè)高級崗位,為什么會(huì)有初級架構(gòu)。這就相當(dāng)于:初級將軍/初級司令。

最后去了公司,發(fā)現(xiàn)十個(gè)人,一個(gè)CTO,九個(gè)架構(gòu)師,而且可能你自己是初級架構(gòu)師,其他人還是高級架構(gòu)師。不過初級架構(gòu)師還不算坑爹了,有些小創(chuàng)業(yè)公司還招CTO做開發(fā)呢。

傳統(tǒng)反爬蟲手段

后臺(tái)對訪問進(jìn)行統(tǒng)計(jì),如果單個(gè)IP訪問超過閾值,予以封鎖。

這個(gè)雖然效果還不錯(cuò),但是其實(shí)有兩個(gè)缺陷,一個(gè)是非常容易誤傷普通用戶,另一個(gè)就是,IP其實(shí)不值錢,幾十塊錢甚至有可能買到幾十萬個(gè)IP。所以總體來說是比較虧的。不過針對三月份呢爬蟲,這點(diǎn)還是非常有用的。

后臺(tái)對訪問進(jìn)行統(tǒng)計(jì),如果單個(gè)session訪問超過閾值,予以封鎖。

這個(gè)看起來更高級了一些,但是其實(shí)效果更差,因?yàn)閟ession完全不值錢,重新申請一個(gè)就可以了。

后臺(tái)對訪問進(jìn)行統(tǒng)計(jì),如果單個(gè)userAgent訪問超過閾值,予以封鎖。

這個(gè)是大招,類似于抗生素之類的,效果出奇的好,但是殺傷力過大,誤傷非常嚴(yán)重,使用的時(shí)候要非常小心。至今為止我們也就只短暫封殺過mac下的火狐。

以上的組合

組合起來能力變大,誤傷率下降,在遇到低級爬蟲的時(shí)候,還是比較好用的。

由以上我們可以看出,其實(shí)爬蟲反爬蟲是個(gè)游戲,RMB玩家才最牛逼。

因?yàn)樯厦嫣岬降姆椒?,效果均一般,所以還是用JavaScript比較靠譜。

也許有人會(huì)說:javascript做的話,不是可以跳掉前端邏輯,直接拉服務(wù)嗎?怎么會(huì)靠譜呢?因?yàn)榘。沂且粋€(gè)標(biāo)題黨埃JavaScript不僅僅是做前端。跳過前端不等于跳過JavaScript。也就是說:我們的服務(wù)器是nodejs做的。

思考題:我們寫代碼的時(shí)候,最怕碰到什么代碼?什么代碼不好調(diào)試?

eval

eval已經(jīng)臭名昭著了,它效率低下,可讀性糟糕。正是我們所需要的。

goto

js對goto支持并不好,因此需要自己實(shí)現(xiàn)goto。

混淆

目前的minify工具通常是minify成abcd之類簡單的名字,這不符合我們的要求。我們可以minify成更好用的,比如阿拉伯語。為什么呢?因?yàn)榘⒗Z有的時(shí)候是從左向右寫,有的時(shí)候是從右向左寫,還有的時(shí)候是從下向上寫。除非對方雇個(gè)阿拉伯程序員,否則非頭疼死不可。

不穩(wěn)定代碼

什么bug不容易修?不容易重現(xiàn)的bug不好修。因此,我們的代碼要充滿不確定性,每次都不一樣。

代碼演示

下載代碼本身,可以更容易理解。這里簡短介紹下思路:

JAVASCRIPT反爬蟲DEMO,通過更改連接地址,來讓對方抓取到錯(cuò)誤價(jià)格。這種方法,簡單,但是如果對方針對性的來查看,十分容易被發(fā)現(xiàn)。

純JAVASCRIPT反爬蟲DEMO,更改key。這種做法簡單,不容易被發(fā)現(xiàn)。但是可以通過有意爬取錯(cuò)誤價(jià)格的方式來實(shí)現(xiàn)。

純JAVASCRIPT反爬蟲DEMO,更改動(dòng)態(tài)key。這種方法可以讓更改key的代價(jià)變?yōu)?,因此代價(jià)更低。

純JAVASCRIPT反爬蟲DEMO,十分復(fù)雜的更改key。這種方法,可以讓對方很難分析,如果加了后續(xù)提到的瀏覽器檢測,更難被爬齲

到此為止。

前面我們提到了邊際效應(yīng),就是說,可以到此為止了。后續(xù)再投入人力就得不償失了。除非有專門的對手與你死磕。不過這個(gè)時(shí)候就是為了尊嚴(yán)而戰(zhàn),不是為了商業(yè)因素了。

瀏覽器檢測

針對不同的瀏覽器,我們的檢測方式是不一樣的。

IE,檢測bug;

FF,檢測對標(biāo)準(zhǔn)的嚴(yán)格程度;

Chrome,檢測強(qiáng)大特性。

八、我抓到你了——然后該怎么辦不會(huì)引發(fā)生產(chǎn)事件——直接攔截

可能引發(fā)生產(chǎn)事件——給假數(shù)據(jù)(也叫投毒)

此外還有一些發(fā)散性的思路。例如是不是可以在響應(yīng)里做SQL注入?畢竟是對方先動(dòng)的手。不過這個(gè)問題法務(wù)沒有給具體回復(fù),也不容易和她解釋。因此暫時(shí)只是設(shè)想而已。

1. 技術(shù)壓制

我們都知道,DotAAI里有個(gè)de命令,當(dāng)AI被擊殺后,它獲取經(jīng)驗(yàn)的倍數(shù)會(huì)提升。因此,前期殺AI太多,AI會(huì)一身神裝,無法擊殺。

正確的做法是,壓制對方等級,但是不擊殺。反爬蟲也是一樣的,不要一開始就搞太過分,逼人家和你死磕。

2. 心理戰(zhàn)

挑釁、憐憫、嘲諷、猥瑣。

以上略過不提,大家領(lǐng)會(huì)精神即可。

3. 放水

這個(gè)可能是是最高境界了。

程序員都不容易,做爬蟲的尤其不容易??蓱z可憐他們給他們一小口飯吃吧。沒準(zhǔn)過幾天你就因?yàn)榉磁老x做得好,改行做爬蟲了。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉