如何防止网站被爬虫爬取的几种办法
2015-04-29 18:41
351 查看
如何防止网站被爬虫爬取的几种办法
小中
大
chen 2013-10-08 23:26 Linux 547 次浏览 抢沙发
今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢。
对于如何防止网站被爬取,我想从以下几种方法去分析:
1.基于程序本身去防止爬取:作为爬虫程序,爬取行为是对页面的源文件爬取,如爬取静态页面的html代码,可以用jquery去模仿写html,这种方法伪装的页面就很难被爬取了,不过这种方法对程序员的要求很高。
2.基于iptables和shell脚本:可以对nginx的access.log进行策略定义,例如定义在1分钟内并发连接数超过30个ip为非法,如ip不在白名单内,则加入iptables策略封掉,当然这种的缺点是会有“误伤”,策略细粒度越小就会有更多的“误伤”,细粒度大就会使效果变差,另外还有类似的第三方工具fail2ban,利用做filter和actor对一些有危害的操作记录或是封ip。但是对于某个特定的爬虫地址(例如网易、有道)的爬取行为拒绝也很难准确做到,因为你无法准确知道这些特定的爬虫ip地址(例如网易、有道),以下是我的定位方式,不过发现由于ip库不准确造成错误的屏蔽。注意:建议不要用封ip条目的方式,iptables列表长度是65535时就会封满,服务器也就会死机。
![](https://blog.hackroad.com/wp-content/themes/BYMT/images/images_error.jpg)
脚本如下:
#! /bin/bash LOGFILE=/var/log/nginx/access.log PREFIX=/etc/spiders #日志中大部分蜘蛛都有spider的关键字,但是百度的不能封,所以过滤掉百度 grep 'spider' $LOGFILE |grep -v 'Baidu' |awk '{print $1}' >$PREFIX/ip1.txt # 封掉网易的有道 grep 'YoudaoBot' $LOGFILE | awk '{print $1}' >>$PREFIX/ip1.txt #封掉雅虎 grep 'Yahoo!' $LOGFILE | awk '{print $1}' >>$PREFIX/ip1.txt # 过滤掉信任IP sort -n $PREFIX/ip1.txt |uniq |sort |grep -v '192.168.0.' |grep -v '127.0.0.1'>$PREFIX/ip2.txt # 如果一小时内,发包不超过30个就要解封 /sbin/iptables -nvL |awk '$1 <= 30 {print $8}' >$PREFIX/ip3.txt for ip in `cat $PREFIX/ip3.txt`; do /sbin/iptables -D INPUT -s $ip -j DROP ; done /sbin/iptables -Z // 将iptables计数器置为0 for ip in `cat $PREFIX/ip2.txt`; do /sbin/iptables -I INPUT -s $ip -j DROP ; done |
User-agent: * Disallow: / |
编辑nginx.conf
拒绝以wget方式的httpuseragent,增加如下内容
## Block http user agent - wget ## if ($http_user_agent ~* (Wget) ) { return 403; } ## Block Software download user agents ## if ($http_user_agent ~* LWP::Simple|BBBike|wget) { return 403; } |
# /usr/local/nginx/sbin/nginx -s reload |
if ($http_user_agent ~ (agent1|agent2|Foo|Wget|Catall Spider|AcoiRobot) ) { return 403; } |
### 大小写敏感http user agent拒绝### if ($http_user_agent ~ (Catall Spider|AcoiRobot) ) { return 403; } ### 大小写不敏感http user agent拒绝### if ($http_user_agent ~* (foo|bar) ) { return 403; } |
相关文章推荐
- 如何防止网站被爬虫爬取的几种办法
- 如何防止网站被爬虫爬取的几种办法
- 如何防止网站被爬虫爬取的几种办法
- 如何防止网站被爬虫爬取的几种办法
- 怎么防止网站被爬虫爬取的几种办法
- python爬虫-网站是如何防止爬虫的
- 如何提高网站的点击率--教你几种好办法
- 如何看一个网站是不是.net的几种途径
- 如何防止利用robots.txt查找到网站后台
- 如何防止别人下载你wordpress网站主题的中文语言包
- php网站如何防止sql注入?(PHP注入的安全规范)
- 网站如何防止注册机恶意注册
- 如何防止网站被恶意骚扰
- 如何防止自己的网站被比人嵌套在<frame>, <iframe>中
- 企业网站如何加强安全防止被入侵
- 如何识别和防止网络爬虫
- 教你如何防止网站被挂马!
- 如何给网站加入优雅的实时反爬虫策略
- Scrapy爬虫框架抓取中文结果为Unicode编码,如何转换UTF-8编码的解决办法
- 如何防止网站内容被采集