1. 程式人生 > >python爬蟲-常見反爬蟲機制與應對方法

python爬蟲-常見反爬蟲機制與應對方法

資料頭User-Agent反爬蟲機制解析:

當我們使用瀏覽器訪問網站的時候,瀏覽器會發送一小段資訊給網站,我們稱為Request Headers,在這個頭部資訊裡面包含了本次訪問的一些資訊,例如編碼方式,當前地址,將要訪問的地址等等。這些資訊一般來說是不必要的,但是現在很多網站會把這些資訊利用起來。其中最常被用到的一個資訊,叫做“User-Agent”。網站可以通過User-Agent來判斷使用者是使用什麼瀏覽器訪問。不同瀏覽器的User-Agent是不一樣的,但都有遵循一定的規則。

例如,我們在windows上面的Chrome瀏覽器,它的User-Agent是:

但是如果我們使用Python的Requests直接訪問網站,除了網址不提供其他的資訊,那麼網站收到的User-Agent是空。這個時候網站就知道我們不是使用瀏覽器訪問的,於是它就可以拒絕我們的訪問。

例如

沒有User-Agent的情況

有User-Agent的情況

如何獲取網站的 User-Agent 呢?請開啟 Chrome,任意開啟一個網站,然後右鍵,“檢查” 開啟開發者工具,定位到 “Network” 選項卡,並重新整理網頁,如下圖所示:

在左下角會出現當前網頁載入的所有元素。隨便點一個元素,於是在右下角會出現對當前元素的請求資訊。在裡面找到Request Headers這一項,裡面的內容即為我們需要的內容。

不同的網站,Request Headers 是不同的

提示:requests的 get方法,post方法,Session模組的get方法,post方法,都支援自定義Headers,引數名為headers, 它可以接收字典作為引數。

我們可以通過字典來設定Headers,例如:

在 requests 中,使用如下程式碼來提交 Headers:

或者Session模組:

檢查User-Agent是一種最簡單的反爬蟲機制,而通過設定Request Headers中的User-Agent,可以突破這種機制。

訪問頻率限制

我們訪問一些網站,由於一些網站的訪問時間設定,我們是不能快速進入下一頁的,這個時候,我們需要修改他的訪問時間,在它訪問下一頁的時候,通過 POST 方式,修改 read_time,正常訪問的話,這個值一般會大於10如果我們修改成 60。於是輕輕鬆鬆的通過了它的反爬蟲策略。

上面這種情況我們現在已經極少會遇到了,因為這種辦法根本沒有任何的防禦能力。猜測這個策略可能是某個新人寫的。

修改訪問頻率:

大多數情況下,我們遇到的是訪問頻率限制。如果你訪問太快了,網站就會認為你不是一個人。這種情況下需要設定好頻率的閾值,否則有可能誤傷。如果大家考過託福,或者在12306上面買過火車票,你應該會有這樣的體會,有時候即便你是真的用手在操作頁面,但是因為你滑鼠點得太快了,它都會提示你: “操作頻率太快...”。

遇到這種網頁,最直接的辦法是限制訪問時間。例如每隔5秒鐘訪問一次頁面。但是如果遇到聰明一點的網站,它檢測到你的訪問時間,這個人訪問了幾十個頁面,但是每次訪問都剛好5秒鐘,人怎麼可能做到這麼準確的時間間隔?肯定是爬蟲,被封也是理所當然的!所以訪問時間間隔你可以設定為一個隨機值,例如0到10之間的隨機秒數。

當然,如果遇到限制訪問頻率的網站,我們使用Selenium來訪問就顯得比較有優勢了,因為Selenium這個東西開啟一個頁面本身就需要一定的時間,所以我們因禍得福,它的效率低下反而讓我們繞過了頻率檢查的反爬蟲機制。而且Selenium還可以幫我們渲染網頁的JavaScript,省去了人工分析JavaScript原始碼的麻煩,可謂一舉兩得。

代理IP或者分散式爬蟲:

如果對頁的爬蟲的效率有要求,那就不能通過設定訪問時間間隔的方法來繞過頻率檢查了。

代理IP訪問可以解決這個問題。如果用100個代理IP訪問100個頁面,可以給網站造成一種有100個人,每個人訪問了1頁的錯覺。這樣自然而然就不會限制你的訪問了。

代理IP經常會出現不穩定的情況。你隨便搜一個“免費代理”,會出現很多網站,每個網站也會給你很多的代理IP,但實際上,真正可用的代理IP並不多。你需要維護一個可用的代理IP池,但是一個免費的代理IP,也許在你測試的時候是可以使用的,但是幾分鐘以後就失效了。使用免費代理IP是已經費時費力,而且很考驗你運氣的事情。

大家可以使用http://icanhazip.com/ 這個網站來檢測你的代理IP是否設定成功。當你直接使用瀏覽器訪問這個網站的時候,它會返回你的IP地址。如下圖所示:

通過requests,我們可以設定代理訪問網站,在requests的get方法中,有一個proxies引數,它接收的資料是一個字典,在這個字典中我們可以設定代理。

大家可以在requests的官方中文文件中看到關於設定代理的更多資訊:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#proxies

我選擇第一個HTTP型別的代理來給大家做測試,執行效果如下圖所示:

從上圖可以看出,我們成功通過了代理IP來訪問網站。

我們還可以使用分散式爬蟲。分散式爬蟲會部署在多臺伺服器上,每個伺服器上的爬蟲統一從一個地方拿網址。這樣平均下來每個伺服器訪問網站的頻率也就降低了。由於伺服器是掌握在我們手上的,因此實現的爬蟲會更加的穩定和高效。這也是我們這個課程最後要實現的目標。

蜜罐技術

蜜罐這個詞,最早是來自於網路攻防中。一方會故意設定一個或者幾個伺服器,故意留下漏洞,讓另一方輕易的入侵進來。這些被故意設定的伺服器,就叫做蜜罐。裡面可能安裝了監控軟體,用來監控入侵者。同時,蜜罐還可以拖延入侵者的時間。

在反爬蟲的機制中,也有一種蜜罐技術。網頁上會故意留下一些人類看不到或者絕對不會點選的連結。由於爬蟲會從原始碼中獲取內容,所以爬蟲可能會訪問這樣的連結。這個時候,只要網站發現了有IP訪問這個連結,立刻永久封禁該IP + User-Agent + Mac地址等等可以用於識別訪問者身份的所有資訊。這個時候,訪問者即便是把IP換了,也沒有辦法訪問這個網站了。給爬蟲造成了非常大的訪問障礙。

不過幸運的是,定向爬蟲的爬行軌跡是由我們來決定的,爬蟲會訪問哪些網址我們都是知道的。因此即使網站有蜜罐,定向爬蟲也不一定會中招。

其他反爬蟲機制

有一些網站,他們每個相同型別的頁面的原始碼格式都不一樣,我們必需要針對每一個頁面寫XPath或者正則表示式,這種情況就比較棘手了。如果我們需要的內容只是文字,那還好說,直接把所有HTML標籤去掉就可以了。可是如果我們還需要裡面的連結等等內容,那就只有做苦力一頁一頁的去看了。

這種網站很少,因為如果每個頁面的原始碼格式都不一樣,要不就使用者體驗查,要不就做網頁的內容會被累個半死。

相關推薦

python爬蟲常見爬蟲機制應對方法

資料頭User-Agent反爬蟲機制解析: 當我們使用瀏覽器訪問網站的時候,瀏覽器會發送一小段資訊給網站,我們稱為Request Headers,在這個頭部資訊裡面包含了本次訪問的一些資訊,例如編碼方式,當前地址,將要訪問的地址等等。這些資訊一般來說是不必要的,但是現在很多

python爬蟲系統學習十一:常見爬蟲機制應對方法

資料頭User-Agent反爬蟲機制解析 我們小時候都聽過一首兒歌。我說一個開頭,大家肯定能把剩下的幾句背出來:小兔子乖乖,把門開啟... 當我們使用瀏覽器訪問網站的時候,瀏覽器會發送一小段資訊給網站,我們稱為Request Headers,在這個頭部資訊裡面包含了本

Python爬取最新爬蟲汽車之家口碑

本人剛學Python沒幾天,程式碼可能比較醜陋, 大牛不要噴 用的Python2.7.2, 因為PyV8最高支援2.7.2, js混淆部分用的PyV8直接執行的js 原理已經寫過一篇了,這裡不再贅述了.可以看我的這篇 目錄結構如下: fonts資料夾負責存放下載的字型檔案

Python內置的處理異常機制調試

異常 hello 程序 finall exception 沒有 運行 style .py Python 內置了一套 try..except...finally的錯誤處理機制 Python內置的try...except...finally用來處理錯誤十分方便。出錯時,會分析錯

爬蟲之簡單爬蟲措施和解決方法

0x01 常見的反爬蟲   這幾天在爬一個網站,網站做了很多反爬蟲工作,爬起來有些艱難,花了一些時間才繞過反爬蟲。在這裡把我寫爬蟲以來遇到的各種反爬蟲策略和應對的方法總結一下。   從功能上來講,爬蟲一般分為資料採集,處理,儲存三個部分。這裡我們只討論資料採集部分。  

CSS - 移動端 常見小bug整理解決方法總結【更新中】

mic ros class clas 問題 像素 css strong 常見問題 常見問題總結與整理系列~ 1. border一像素在手機上看著有點粗的問題: 原理是因為:1px在手機上是使用2dp進行渲染的 換成 border: 0.5像素?是不行的!

Oracle RAC的機制測試方法

Oracle RAC是Oracle Real Application Cluster的簡寫,官方中文文件一般翻譯為“真正應用叢集”。RAC叢集是由若干物理機組成,每個物理機為一個節點,這些節點間通過網線連線(也叫心跳網路)。每個節點上都執行一個例項,這些例項通過CRS(CRS通過一系列的程序和服務來保證叢集的

常見Java記憶體溢位解決方法詳解

Java programming language具有目前大部分程式語言所共有的一些特徵,被特意設計用於網際網路的分散式環境。Java具有類似於C++語言的"形式和感覺",但它要比C++語言更易於使用,而且在程式設計時徹底採用了一種"以物件為導向"的方式。使用Java編寫的

淘寶刷單機制注意方法

(1)通過技術手段給予瀏覽器載入一個控制元件,那個黑客把控制元件賣給騙子,騙子自己電腦載入好控制元件後,把商家引入釣魚網站,騙走現金,讓你神不知鬼不覺!所以控制元件類的很難防!其實這無需什麼高科技手段,但 卻只需0.1秒就能替換掉你的支付頁面,你根本防不勝防,現在遠端操作人員使用的都是IE搜狗谷歌這些瀏覽器,

常見除錯手段及其規避方法(一)-IsDebuggerPresent

軟體中會使用各種手段防止Craker除錯程式,為此我們必須瞭解常見的反除錯技術的原理及規避方法。   偵錯程式:Ol

Python爬蟲爬蟲大戰

公司 學校 爬取 nbsp 識別 防止 toc 壓力 自動 爬蟲與發爬蟲的廝殺,一方為了拿到數據,一方為了防止爬蟲拿到數據,誰是最後的贏家? 重新理解爬蟲中的一些概念 爬蟲:自動獲取網站數據的程序反爬蟲:使用技術手段防止爬蟲程序爬取數據誤傷:反爬蟲技術將普通用戶識別為爬蟲,

Python破解有道翻譯爬蟲機制

破解有道翻譯反爬蟲機制 web端的有道翻譯,在之前是直接可以爬的。也就是說只要獲取到了他的介面,你就可以肆無忌憚的使用他的介面進行翻譯而不需要支付任何費用。那麼自從有道翻譯推出他的API服務的時候,就對這個介面做一個反爬蟲機制(如果大家都能免費使用到他的翻譯介面,那他的

利用python爬蟲成功突破12306機制「打包更新」

  12306自動搶票 已經到春運了,在這裡為大家奉上一個搶票的軟體,希望大家喜歡哦! 最近12306更新的比較快,而且反爬比較嚴重,研究了好長時間也不容易。 希望大家可以免費點個贊,隨手轉發一下,這裡的驗證碼。     會在本地當

Python爬蟲機制

新增請求頭User-Agent: 如果不新增請求頭,網站會認為不是用瀏覽器操作,會進行反爬蟲,新增請求頭,網站會識別你是用哪個瀏覽器,不同的瀏覽器User-Agent不同 修改訪問頻率: 大多數情況下,我們遇到的是訪問頻率限制。如果你訪問太快了,網站就會認為你不是一個人。

Python(4) 用Python破解有道翻譯爬蟲機制

web端的有道翻譯,在之前是直接可以爬的。也就是說只要獲取到了他的介面,你就可以肆無忌憚的使用他的介面進行翻譯而不需要支付任何費用。那麼自從有道翻譯推出他的API服務的時候,就對這個介面做一個反爬蟲機制(如果大家都能免費使用到他的翻譯介面,那他的API服務怎麼賺錢)。這個反爬蟲機制在爬

Python爬蟲從入門到放棄(二十二)之 爬蟲爬蟲大戰

相對 一個 log 識別 誰是 pytho logs 京東 自動 原文地址https://www.cnblogs.com/zhaof/p/7326260.html 爬蟲與發爬蟲的廝殺,一方為了拿到數據,一方為了防止爬蟲拿到數據,誰是最後的贏家? 重新理解爬蟲中的一些概念 爬

Python爬取拉勾網資料(破解爬蟲機制)

人生苦短, 我學 Python! 這篇文章主要記錄一下我學習 Python 爬蟲的一個小例子, 是爬取的拉勾網的資料. 1.準備 配置 Python 環境什麼的就不說了, 網上教程很多, 自行解決. 2.扒原始碼 先開啟拉勾網的網頁. 我們要爬取這部分的資料

Python Scrapy爬蟲常見解決方案(包含5種方法

ins 都是 可能 自定義 輸入 src stx 用戶 play 爬蟲的本質就是“抓取”第二方網站中有價值的數據,因此,每個網站都會或多或少地采用一些反爬蟲技術來防範爬蟲。比如前面介紹的通過 User-Agent 請求頭驗證是否為瀏覽器、使用 Jav

爬蟲爬蟲

團隊 不定 足夠 image 上線 向上 互聯 真心 高級技巧 轉自:https://mp.weixin.qq.com/s/-w-yC6PCdTOpfKS8HZEleA 前言 爬蟲與反爬蟲,是一個很不陽光的行業。 這裏說的不陽光,有兩個含義。 第一是,這

爬蟲實踐---悅音臺mv排行榜簡單爬蟲技術應用

代碼 int logs 1.8 mac for html req 3.5 由於要抓取的是悅音臺mv的排行榜,這個排行榜是實時更新的,如果要求不停地抓取,這將有可能導致悅音臺官方采用反爬蟲的技術將ip給封掉。所以這裏要應用一些反爬蟲相關知識。 目標網址:http://vcha