首页 > 其他分享 >如何防止网站被爬虫爬取的几种办法

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

时间:2023-06-04 18:33:58浏览次数:32  
标签:ip 爬虫 agent 几种 爬取 nginx PREFIX user txt


 

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

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

脚本如下:


#! /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文件:例如阻止所有的爬虫爬取,但是这种效果不是很明显。


User-agent: *
Disallow: /



 

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

编辑nginx.conf


#vim /usr/local/nginx/conf/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



 

 

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


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 ;
}



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

 

标签:ip,爬虫,agent,几种,爬取,nginx,PREFIX,user,txt
From: https://blog.51cto.com/u_2700990/6411634

相关文章

  • 异步爬虫demo2
    importreimportaiohttpimportasyncioclassAsyn:def__init__(self):self.__headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/112.0.0.0Safari/537......
  • 网络爬虫--爬取泉州,福州,厦门历史天气和近七日天气--数据可视化
     一:选题背景:通过爬取各个城市的历史天气数据及近日数据,来进行对天气的数据分析与可视化。从而帮助我们的生活更加便利。所爬取的网站为2345天气王https://tianqi.2345.com/wea_forty/71924.htm这里我们进入网站后右键检查,点击网络这一栏,并刷新页面能够看到有两个文件,而我们所......
  • 使用 HTTP Boot,可以批量部署操作系统和软件,提高管理效率和降低成本。下面是常用的几种
    使用HTTPBoot,可以批量部署操作系统和软件,提高管理效率和降低成本。下面是常用的几种批量部署方案:使用WindowsDeploymentServices(WDS):WDS是一种基于微软技术的网络引导服务,可以快速部署Windows操作系统和应用程序。通过配置WDS服务器和映像文件,可以实现从远程服务器引......
  • 02 python爬虫-bs4
    目录步骤代码结果new.csv图片步骤爬取主页面中的文章详情的url和图片地址下载图片并请求加文章详情中的页面内容爬取文章详情中的标题、作者、发布时间代码importrequestsimportcsvfrombs4importBeautifulSoup#请求的一级页面的地址q_url='http://xinfadi.com.cn/new......
  • 2023-06-03 初试python爬取文章
    注意:本实验是在windows系统下操作。首先配置python环境以及安装一些必要的库:安装python请前往python官网下载,仙人指路......
  • Vue路由传参的几种方式
    vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效一、利用"router-link"路由导航父组件:使用 <router-linkto="/跳转路径/传入的参数"></router-link>例如:<router-linkto="/a/123">routerlink传参</router-link>子组件:使用this.$route.params.num接收父......
  • php rabbitmq队列的几种管理方案
     这里就懒得记录了,直接放上一篇还不错的知乎博主的博客吧。点击前往  ......
  • Java中的爬虫
    爬虫pattern:表示正则表达式Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取步骤:获取正则表达式的对象Patternp=Pattern.compile("正则表达式");获取文本匹配器的对象Stringstr="文本";Matcherm=p.matcher(str);p:规则,str:大串,m;文本匹......
  • Linux 主机名被修改成bogon问题的几种解决办法
        当Linux主机名由@myhostname变成了@bogon了之后,访问网络就会出现问题,重启后也没有解决。网上搜索N久之后,发现了如下几种解决方式,特此记录一下。 1、在linux下添加一个127.0.0.2名叫bogon的主机此方法使用后,bogon主机名得以解析,使用的主机名仍为bogon,但进入linux已不......
  • java单例模式几种实现方式
    1、饿汉式(线程安全,调用效率高,但是不能延时加载):publicclassImageLoader{privatestaticImageLoaderinstance=newImageLoader;privateImageLoader(){}publicstaticImageLoadergetInstance(){returninstance;}}一上来就把单例对象创建出来了,要用的时候直......