`
hongtoushizi
  • 浏览: 378662 次
  • 性别: 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爬虫爬取网上图片

    Python爬虫技术是一种用于自动化网络数据抓取的编程方法,尤其在处理大量网页信息时非常有用。本项目是一个关于使用Python进行图片爬取的小型实践,旨在帮助学习者掌握基本的网页抓取和图片下载技能。 首先,我们...

    爬虫 爬取58同城二手房信息.zip

    爬虫是一种自动化地从互联网上抓取信息的技术,它能够帮助我们批量收集和处理大量的网页数据。58同城作为中国知名的分类信息网站,其二手房板块提供了丰富的房源信息,包括价格、面积、地理位置等,对于数据分析或...

    Python爬虫爬取马蜂窝旅游景点评分、评论、评论日期(针对只能爬取五页评论做了改动)

    ### Python爬虫爬取马蜂窝旅游景点评分、评论、评论日期 #### 一、问题背景及解决方案 在本文档中,我们探讨了一个常见的问题——如何有效地爬取马蜂窝网站上的旅游景点评论数据。通常情况下,用户仅能查看每个...

    网络爬虫爬取网页链接

    网络爬虫,也被称为网页蜘蛛或自动索引器,是一种自动化程序,用于浏览互联网并抓取网页内容。在本程序中,重点在于实现爬虫抓取网页链接的功能,这是一个核心的网络爬虫任务,通常用于数据挖掘、搜索引擎索引、网站...

    java爬虫爬取贴吧所有用户头像

    Java爬虫技术是一种用于自动化网络数据抓取的编程方法,主要应用于数据分析、信息提取和搜索引擎优化等领域。在Java中,我们可以使用多种库来实现爬虫功能,如Jsoup、HttpURLConnection、Apache HttpClient以及...

    网络爬虫 爬取搜狐新闻 并显示到页面上

    网络爬虫,也被称为网页抓取或Web scraping,是一种...以上就是“网络爬虫爬取搜狐新闻并显示到页面上”的主要步骤和技术点,通过实践这个项目,你可以深入理解网络爬虫的工作原理,并提升数据分析和网页展示的能力。

    Python爬虫爬取会计师协会网站的指定文章.zip

    8. **Jupyter Notebook**:`Python爬虫爬取会计师协会网站的指定文章(实例57).ipynb`是一个Jupyter Notebook文件,这是一种交互式编程环境,便于代码测试、数据分析和结果展示。 9. **图片抓取**:`images`目录可能...

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

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

    Python-爬虫爬取豆果网和美食网的菜单

    Python Web爬虫是一种技术,用于自动化地从互联网上抓取数据。在这个实例中,我们将讨论如何使用Python来爬取豆果网和美食网的菜单。这两个网站提供了丰富的菜谱信息,包括菜品名称、制作方法、所需食材等,是数据...

    Python爬虫爬取电影票房数据及图表展示操作示例

    首先,我们需要了解几个关键概念和技术: 1. **Python爬虫**:Python爬虫是一种自动化抓取互联网数据的技术,通常使用requests库发送HTTP请求,re库进行正则表达式匹配,以及BeautifulSoup等库解析HTML或XML文档。 ...

    python爬虫爬取csdn文章内容存储为excel文件,后续添加在mysql数据库中.zip

    本项目“python爬虫爬取csdn文章内容存储为excel文件,后续添加在mysql数据库中”旨在展示如何利用Python来爬取知名IT社区CSDN上的文章内容,并将这些数据整理存入Excel文件,最终进一步导入到MySQL数据库中,以实现...

    Java爬虫--爬取xx娱乐网的数据,让你的程序不单薄(一)

    8. **延迟和请求限制**:为了避免对目标网站造成过大压力,需要在爬取过程中加入延迟,如每次请求后等待几秒。同时,留意网站的robots.txt文件,遵循其设定的爬虫规则。 9. **日志记录**:日志系统如Log4j可以帮助...

    爬虫课设~爬取高校.zip

    【标题】"爬虫课设~爬取高校.zip"是一个包含多个数据文件和相关资源的压缩包,主要用于教学目的,特别是针对爬虫技术的期末课程设计。这个项目旨在覆盖爬虫学习过程中的核心知识点,帮助学生理解和掌握网络数据抓取...

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

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

    京东爬虫,可抓取京东商品信息和评论

    京东爬虫是网络数据采集的一种常见应用场景,主要目的是获取京东电商平台上的商品信息和用户评论,以便进行数据分析或市场研究。本项目使用了Python中的Scrapy框架来实现这一目标。Scrapy是一个强大的、专为爬虫设计...

    Python爬虫爬取新闻资讯案例详解

    【Python爬虫爬取新闻资讯案例详解】 在Python编程领域,网络爬虫是一种常见的技术,用于自动抓取互联网上的信息。本案例详细介绍了如何使用Python爬虫来抓取新闻资讯,从列表页到详情页,再到数据的保存,具体涉及...

    最好中国大学近几年排名及python爬虫代码

    Python爬虫是获取网络数据的一种常见方法,尤其在处理大量结构化数据时,如网页表格、新闻文章等。在这个案例中,爬虫被用于抓取和解析“最好中国大学”排名的相关网页数据。Python的requests库负责发送HTTP请求,...

    主题网络爬虫研究

    除了上述方法外,还有一些创新性的技术也被应用于主题网络爬虫的研究中。例如,结合用户行为分析的方法,可以根据用户的点击率、停留时间等行为指标来调整抓取策略;还有一些基于深度学习的方法,如卷积神经网络...

    python爬虫,爬取页面

    请注意,爬虫行为必须遵守《互联网信息服务管理办法》以及目标网站的Robots协议,尊重网站的版权,不要对网站造成过大的访问压力,避免引起反爬策略或法律纠纷。同时,为了提高爬虫的生存能力,可以学习如何模拟...

    拼多多爬虫,爬取所有商品、评论等信息.zip

    爬虫是互联网数据挖掘的一种常见方法,它允许程序员自动化地从网页中提取大量信息。在这个项目中,我们将探讨以下几个关键知识点: 1. **网络爬虫基础**:网络爬虫是通过模拟浏览器发送HTTP请求(GET或POST)来获取...

Global site tag (gtag.js) - Google Analytics