`
hongtoushizi
  • 浏览: 361726 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

如何防止网站被爬虫爬取的几种办法

阅读更多

转载自:  http://laoxu.blog.51cto.com/4120547/1302013

 

今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对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时就会封满,服务器也就会死机。

111812892.jpg

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /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

 

3.使用robots.txt文件:例如阻止所有的爬虫爬取,但是这种效果不是很明显。

1
2
User-agent: *
Disallow: /

 

4.使用nginx的自带功能:通过对httpuseragent阻塞来实现,包括GET/POST方式的请求,以nginx为例,具体步骤如下:

编辑nginx.conf

1
#vim /usr/local/nginx/conf/nginx.conf

拒绝以wget方式的httpuseragent,增加如下内容

1
2
3
4
5
6
7
8
## 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;
}

平滑启动

1
# /usr/local/nginx/sbin/nginx -s reload

 

 

如何拒绝多种http user agent,内容如下:

1
2
3
if ($http_user_agent ~ (agent1|agent2|Foo|Wget|Catall Spider|AcoiRobot) ) {
return 403;
}

 

大小写敏感匹配

1
2
3
4
5
6
7
8
### 大小写敏感http user agent拒绝###
if ($http_user_agent ~ (Catall Spider|AcoiRobot) ) {
return 403;
}
### 大小写不敏感http user agent拒绝###
if ($http_user_agent ~* (foo|bar) ) {
return 403;
}

注意语法:~*表示是大小写不敏感,~表示是大小写敏感

 

分享到:
评论

相关推荐

    如何使用python爬虫爬取要登陆的网站

    登录的常见方法无非是这两种 1、让你输入帐号和密码登录 2、让你输入帐号密码+验证码登录 今天 先跟你说说第一种 需要验证码的咱们下一篇再讲 第一招 Cookie大法 你平常在上某个不为人知的网站的时候 是不是...

    我通过爬虫爬取了来自安居客二手房网站中上海二手房的数据,并通过机器学习方法进行数据分析.zip

    爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续...然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。

    Python爬虫进阶之爬取某视频并下载的实现

    这几天在家闲得无聊,意外的挖掘到了一个资源网站(你懂得),但是网速慢广告多下载不了种种原因让我突然萌生了爬虫的想法。 下面说说流程: 一、网站分析 首先进入网站,F12检查,本来以为这种低端网站很好爬取,是...

    C++网络爬虫项目

    基于布隆算法,对欲加入队列的原始统一资源定位符进行过滤,以防止已被抓 取过的URL再次入队,降低冗余开销同时避免无限循环。 2.2.3. 原始统一资源定位符(RawUrl) 提供原始形态的统一资源定位符字符串的简单包装,...

    Python3爬虫技术文档(一)—— HTML数据的获取

    目录使用urlib发送请求处理异常解析链接分析Robots协议使用requests基本用法高级用法 爬虫首先是需要获取某个网页的源代码,从而才能获取你想要的信息。...下面介绍几种获取网页源代码的方式 使用urlib ur

    Python爬虫动态ip代理防止被封的方法

    在爬取的过程中难免发生ip被封和403错误等等,这都是网站检测出你是爬虫而进行反爬措施,在这里为大家总结一下怎么用IP代理防止被封 首先,设置等待时间: 常见的设置等待时间有两种,一种是显性等待时间(强制停几...

    基于java实现网络爬虫(蜘蛛)源码

    网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般只有以下几种情况: 1) 搜索引擎 2) 竞品调研 3) 舆情监控 4) 市场分析 网络爬虫的整体执行流程: 1) 确定一个(多个)种子网页 2) ...

    强力 Java 爬虫,列表分页、详细页分页、ajax、微内核高扩展、配置灵活.rar

    网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般有以下几种情况: 1)搜索引擎 2)竞品调研 3)舆情监控 4)市场分析 网络爬虫的整体执行流程 1)确定一个(多个)种子网页 2)进行数据的...

    基于java实现网络爬虫(蜘蛛)源码分享

    网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般只有以下几种情况: 1) 搜索引擎 2) 竞品调研 3) 舆情监控 4) 市场分析 网络爬虫的整体执行流程: 1) 确定一个(多个)种子网页 2) ...

    Python爬取某视频并下载

    这几天在家闲得无聊,意外的挖掘到了一个资源网站(你懂得),但是网速慢广告多下载不了种种原因让我突然萌生了爬虫的想法。 下面说说流程: 一、网站分析 首先进入网站,F12检查,本来以为这种低端网站很好爬取,是...

    Luna 是一款基于视觉的、强大的自动化工具.zip

    我们提供了一种先进的方法来对抗现代爬虫检测技术,以保护您的网络资源免受恶意爬取和滥用。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或...

    Python 通过URL打开图片实例详解

    查了很多资料,发现有这么几种方法,这里做个记录。 本文用到的图片URL如下: img_src = ‘http://wx2.sinaimg.cn/mw690/ac38503ely1fesz8m0ov6j20qo140dix.jpg’ 1.用OpenCV OpenCV的imread()只能加载本地的图片,...

    python高阶爬虫实战分析

    说爬虫一定要先说爬取内容的方法,python有这么几个支持爬虫的库,一个是urllib和它的后续版本库,这个库做爬取的时候生成的中继对象是比较多的,楼主也记不大住都有什么,而且这个库的使用在楼主看

    自-Python-试卷题目有答案-测题库答案.doc

    1、Python提供了哪几种读取文件的方法? 答: θ 文件对象提供了read()方法,用于读取指定个数的字符; θ 文件对象提供了readline()方法,用于每次读取一行数据; θ 文件对象提供了readlines()方法,用于可以读取...

    Python爬虫Scrapy框架CrawlSpider原理及使用案例

    提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬去进行实现的(Request模块回调) 方法二:基于CrawlSpider的自动爬去进行实现(更加简洁...

    Scrapy爬虫之解决“’Rule’ object is not iterable”

    Scrapy爬虫出现“‘Rule’ object is not iterable”时,意思是rule规定的正则表达式无法迭代,无法进一步爬取到所规定的页面,现有以下几种解决方式供参考。 解决方法 检查是否有相关代码打错。 完善正则表达式 ...

    MNWeeklyCategory:码农周刊一周精选分类

    一周精选分类 目前更新至327期 写在最前面的话 作为最初的一批码农...在尝试了好几种方法之后,我决定利用selenium + beautifulsoup做爬虫 将所有的爬取下来的标题和url转化为markdown文件 利用requests库除去不能访

    大数据分析教程——制作数据报告的流程.docx

    3、自行收集所需数据,比如用爬虫工具爬取点评网站的商家评分、评价内容等,或是直接自己人肉收集(手工复制下来),亦或是找一个免费问卷网站做一份问卷然后散发给你身边的人,都是可以的。这种方式受限制较少,但...

Global site tag (gtag.js) - Google Analytics