是否担忧别人将你的博客文章所有爬下来?3行代码教你检测爬虫

本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,版权归原做者全部,若有问题请及时联系咱们以做处理。php

如下文章来源于Python实用宝典 ,做者Python实用宝典html

是否担忧别人将你的博客文章所有爬下来?python

是否担忧高频率爬虫致使网站瘫痪?web

别担忧,如今有一个Python写的神器——crawlerdetect,帮助你检测爬虫,保障网站的正常运转。网络

1.准备

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。ide

在终端输入如下命令安装咱们所须要的依赖模块:工具

pip install crawlerdetect

看到 Successfully installed xxx 则说明安装成功。学习

2.使用方法

它能够经过user-agent、headers等请求头识别爬虫或机器人。网站

所以,你能够传递两种参数。第一种,使用user-agent检测机器人:google

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()
# 若是是机器人,这条语句返回True

第二种识别方式会用上所有headers参数,这种方式比单纯用user-agent精准,由于它判断的依据更加全面。

 

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()
# 若是是机器人,这条语句返回True

你还能够识别相应爬虫的名字(若是有的话),经过这种方式,你能给一些著名的爬虫(如baiduspider、googlebot)添加白名单,不进行拦截。

 

from crawlerdetect import CrawlerDetect
crawler_detect = CrawlerDetect()
crawler_detect.isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')
# 若是是机器人,这条语句返回True
crawler_detect.getMatches()
# Sosospider

有了这个工具,咱们就能够实现实时的爬虫封禁:

首先,你要实时监控网站上的http请求,检测其对应的headers.

其次,若是识别到该请求是机器人(爬虫)发出的,就可将其IP记录下来。

最后,将IP加入到Nginx或Apache的动态黑名单中,实现实时的爬虫封禁。

这一套流程我尚未试验过,你们有兴趣能够试试,理论上可行。

本文分享 CSDN - 松鼠爱吃饼干。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。