日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談爬蟲及繞過網(wǎng)站反爬取機制

爬蟲是什么呢,簡單而片面的說,爬蟲就是由計算機自動與服務(wù)器交互獲取數(shù)據(jù)的工具。爬蟲的最基本就是get一個網(wǎng)頁的源代碼數(shù)據(jù),如果更深入一些,就會出現(xiàn)和網(wǎng)頁進行POST交互,獲取服務(wù)器接收POST請求后返回的數(shù)據(jù)。一句話,爬蟲用來自動獲取源數(shù)據(jù),至于更多的數(shù)據(jù)處理等等是后續(xù)的工作,這篇文章主要想談?wù)勁老x獲取數(shù)據(jù)的這一部分。爬蟲請注意網(wǎng)站的Robot.txt文件,不要讓爬蟲違法,也不要讓爬蟲對網(wǎng)站造成傷害。

反爬及反反爬概念的不恰當舉例

基于很多原因(如服務(wù)器資源,保護數(shù)據(jù)等),很多網(wǎng)站是限制了爬蟲效果的。

考慮一下,由人來充當爬蟲的角色,我們怎么獲取網(wǎng)頁源代碼?最常用的當然是右鍵源代碼。

網(wǎng)站屏蔽了右鍵,怎么辦?

拿出我們做爬蟲中最有用的東西 F12(歡迎討論)

同時按下F12就可以打開了(滑稽)

源代碼出來了!!

在把人當作爬蟲的情況下,屏蔽右鍵就是反爬取策略,F(xiàn)12就是反反爬取的方式。

講講正式的反爬取策略

事實上,在寫爬蟲的過程中一定出現(xiàn)過沒有返回數(shù)據(jù)的情況,這種時候也許是服務(wù)器限制了UA頭(user-agent),這就是一種很基本的反爬取,只要發(fā)送請求的時候加上UA頭就可以了…是不是很簡單?

其實一股腦把需要不需要的Request Headers都加上也是一個簡單粗暴的辦法……

有沒有發(fā)現(xiàn)網(wǎng)站的驗證碼也是一個反爬取策略呢?為了讓網(wǎng)站的用戶能是真人,驗證碼真是做了很大的貢獻。隨驗證碼而來的,驗證碼識別出現(xiàn)了。

說到這,不知道是先出現(xiàn)了驗證碼識別還是圖片識別呢?

簡單的驗證碼現(xiàn)在識別起來是非常簡單的,網(wǎng)上有太多教程,包括稍微進階一下的去噪,二值,分割,重組等概念。可是現(xiàn)在網(wǎng)站人機識別已經(jīng)越發(fā)的恐怖了起來,比如這種:

簡單講述一下去噪二值的概念

將一個驗證碼變成就是二值,也就是將圖片本身變成只有兩個色調(diào),例子很簡單,通過python PIL庫里的

 
 
 
 
  1. Image.convert("1")

就能實現(xiàn),但如果圖片變得更為復(fù)雜,還是要多思考一下,比如如果直接用簡單方式的話 就會變成思考一些這種驗證碼應(yīng)該怎么識別?這種時候 去噪 就派上了用處,根據(jù)驗證碼本身的特征,可以計算驗證碼的底色和字體之外的RGB值等,將這些值變成一個顏色,將字體留出。示例代碼如下,換色即可

 
 
 
 
  1. for x in range(0,image.size[0]):
  2.         for y in range(0,image.size[1]):
  3.             # print arr2[x][y]
  4.             if arr[x][y].tolist()==底色:
  5.                 arr[x][y]=0
  6.             elif arr[x][y].tolist()[0] in range(200,256) and arr[x][y].tolist()[1] in range(200,256) and arr[x][y].tolist()[2] in range(200,256):
  7.                 arr[x][y]=0
  8.             elif arr[x][y].tolist()==[0,0,0]:
  9.                 arr[x][y]=0
  10.             else:
  11.                 arr[x][y]=255

arr是由numpy得到的,根據(jù)圖片RGB值得出的矩陣,讀者可以自己嘗試完善代碼,親自實驗一下。

細致的處理之后圖片可以變成識別率還是很高的。

在驗證碼的發(fā)展中,還算清晰的數(shù)字字母,簡單的加減乘除,網(wǎng)上有輪子可以用,有些難的數(shù)字字母漢字,也可以自己造輪子(比如上面),但更多的東西,已經(jīng)足夠?qū)懸粋€人工智能了……(有一種工作就是識別驗證碼…)

再加一個小提示:有的網(wǎng)站PC端有驗證碼,而手機端沒有…

下一個話題!

反爬取策略中比較常見的還有一種封IP的策略,通常是短時間內(nèi)過多的訪問就會被封禁,這個很簡單,限制訪問頻率或添加IP代理池就OK了,當然,分布式也可以…

IP代理池->左轉(zhuǎn)Google右轉(zhuǎn)baidu,有很多代理網(wǎng)站,雖然免費中能用的不多 但畢竟可以。

還有一種也可以算作反爬蟲策略的就是異步數(shù)據(jù),隨著對爬蟲的逐漸深入(明明是網(wǎng)站的更新?lián)Q代!),異步加載是一定會遇見的問題,解決方式依然是F12。以不愿透露姓名的網(wǎng)易云音樂網(wǎng)站為例,右鍵打開源代碼后,嘗試搜索一下評論

數(shù)據(jù)呢?!這就是JS和Ajax興起之后異步加載的特點。但是打開F12,切換到NetWork選項卡,刷新一下頁面,仔細尋找,沒有秘密。

哦,對了 如果你在聽歌的話,點進去還能下載呢…

僅為對網(wǎng)站結(jié)構(gòu)的科普,請自覺抵制盜版,保護版權(quán),保護原創(chuàng)者利益。

如果說這個網(wǎng)站限制的你死死的,怎么辦?我們還有最后一計,一個強無敵的組合:selenium + PhantomJs

這一對組合非常強力,可以完美模擬瀏覽器行為,具體的用法自行百度,并不推薦這種辦法,很笨重,此處僅作為科普。

總結(jié)

本文主要討論了部分常見的反爬蟲策略(主要是我遇見過的(聳肩))。主要包括 HTTP請求頭,驗證碼識別,IP代理池,異步加載幾個方面,介紹了一些簡單方法(太難的不會!),以Python為主。希望能給初入門的你引上一條路。


新聞名稱:淺談爬蟲及繞過網(wǎng)站反爬取機制
URL標題:http://www.5511xx.com/article/coidsec.html