是否擔(dān)心高頻率爬蟲(chóng)導(dǎo)致網(wǎng)站癱瘓?
別擔(dān)心,現(xiàn)在有一個(gè)Python寫(xiě)的神器——crawlerdetect,幫助你檢測(cè)爬蟲(chóng),保障網(wǎng)站的正常運(yùn)轉(zhuǎn)。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上噢,如果沒(méi)有,請(qǐng)?jiān)L問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda
Windows環(huán)境下打開(kāi)Cmd(開(kāi)始—運(yùn)行—CMD),蘋(píng)果系統(tǒng)環(huán)境下請(qǐng)打開(kāi)Terminal(command+空格輸入Terminal),準(zhǔn)備開(kāi)始輸入命令安裝依賴(lài)。
當(dāng)然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來(lái),在編輯器下方的終端運(yùn)行命令安裝依賴(lài)模塊,多舒服的一件事?。?a target="_blank">Python 編程的最好搭檔—VSCode 詳細(xì)指南。
在終端輸入以下命令安裝我們所需要的依賴(lài)模塊:
pip install crawlerdetect
看到 Successfully installed xxx 則說(shuō)明安裝成功。
2.使用方法
它可以通過(guò)user-agent、headers等請(qǐng)求頭識(shí)別爬蟲(chóng)或機(jī)器人。
因此,你可以傳遞兩種參數(shù)。第一種,使用user-agent檢測(cè)機(jī)器人:
from crawlerdetect import CrawlerDetect
crawler_detect = CrawlerDetect(user_agent='Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile (compatible; Yahoo Ad monitoring; https://help.yahoo.com/kb/yahoo-ad-monitoring-SLN24857.html)')
crawler_detect.isCrawler()
# 如果是機(jī)器人,這條語(yǔ)句返回True
第二種識(shí)別方式會(huì)用上全部headers參數(shù),這種方式比單純用user-agent精準(zhǔn),因?yàn)樗袛嗟囊罁?jù)更加全面。
from crawlerdetect import CrawlerDetect
crawler_detect = CrawlerDetect(headers={'DOCUMENT_ROOT': '/home/test/public_html', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': '*/*', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 'HTTP_CACHE_CONTROL': 'no-cache', 'HTTP_CONNECTION': 'Keep-Alive', 'HTTP_FROM': 'googlebot(at)googlebot.com', 'HTTP_HOST': 'www.test.com', 'HTTP_PRAGMA': 'no-cache', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36', 'PATH': '/bin:/usr/bin', 'QUERY_STRING': 'order=closingDate', 'REDIRECT_STATUS': '200', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_PORT': '3360', 'REQUEST_METHOD': 'GET', 'REQUEST_URI': '/?test=testing', 'SCRIPT_FILENAME': '/home/test/public_html/index.php', 'SCRIPT_NAME': '/index.php', 'SERVER_ADDR': '127.0.0.1', 'SERVER_ADMIN': 'webmaster@test.com', 'SERVER_NAME': 'www.test.com', 'SERVER_PORT': '80', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SIGNATURE': '', 'SERVER_SOFTWARE': 'Apache', 'UNIQUE_ID': 'Vx6MENRxerBUSDEQgFLAAAAAS', 'PHP_SELF': '/index.php', 'REQUEST_TIME_FLOAT': 1461619728.0705, 'REQUEST_TIME': 1461619728})
crawler_detect.isCrawler()
# 如果是機(jī)器人,這條語(yǔ)句返回True
你還可以識(shí)別相應(yīng)爬蟲(chóng)的名字(如果有的話(huà)),通過(guò)這種方式,你能給一些著名的爬蟲(chóng)(如baiduspider、googlebot)添加白名單,不進(jìn)行攔截。
from crawlerdetect import CrawlerDetect
crawler_detect = CrawlerDetect()
crawler_detect.isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')
# 如果是機(jī)器人,這條語(yǔ)句返回True
crawler_detect.getMatches()
# Sosospider
有了這個(gè)工具,我們就可以實(shí)現(xiàn)實(shí)時(shí)的爬蟲(chóng)封禁:
**1. **實(shí)時(shí)監(jiān)控網(wǎng)站上的http請(qǐng)求,檢測(cè)其對(duì)應(yīng)的headers.
**2. **如果識(shí)別到該請(qǐng)求是機(jī)器人(爬蟲(chóng))發(fā)出的,就可將其IP記錄下來(lái)。
**3. ** 將IP加入到Nginx或Apache的動(dòng)態(tài)黑名單中,實(shí)現(xiàn)實(shí)時(shí)的爬蟲(chóng)封禁。
這一套流程我還沒(méi)有試驗(yàn)過(guò),大家有興趣可以試試,理論上可行。
-
代碼
+關(guān)注
關(guān)注
30文章
4932瀏覽量
72849 -
編輯器
+關(guān)注
關(guān)注
1文章
825瀏覽量
32588 -
python
+關(guān)注
關(guān)注
57文章
4851瀏覽量
89346 -
爬蟲(chóng)
+關(guān)注
關(guān)注
0文章
86瀏覽量
7885
發(fā)布評(píng)論請(qǐng)先 登錄
Python數(shù)據(jù)爬蟲(chóng)學(xué)習(xí)內(nèi)容
請(qǐng)問(wèn)前三行是什么意思?
請(qǐng)問(wèn)這三行代碼是固定這樣寫(xiě)的嗎?
三行搞定獨(dú)立按鍵
Python爬蟲(chóng)簡(jiǎn)介與軟件配置
什么是三行按鍵?有什么用
完全自學(xué)指南Python爬蟲(chóng)BeautifulSoup詳解
python爬蟲(chóng)入門(mén)教程之python爬蟲(chóng)視頻教程分布式爬蟲(chóng)打造搜索引擎
python為什么叫爬蟲(chóng)
如何實(shí)現(xiàn)計(jì)算機(jī)視覺(jué)的目標(biāo)檢測(cè)10行Python代碼幫你實(shí)現(xiàn)
python為什么叫爬蟲(chóng) python工資高還是java的高
用Python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)
Sweetviz讓你三行代碼實(shí)現(xiàn)探索性數(shù)據(jù)分析
來(lái)看看他們用代碼寫(xiě)的“三行詩(shī)”
Sweetviz: 讓你三行代碼實(shí)現(xiàn)探索性數(shù)據(jù)分析

crawlerdetect:Python 三行代碼檢測(cè)爬蟲(chóng)
評(píng)論