Nginx反爬虫: 禁止某些User Agent抓取网站

Stella981
• 阅读 1104

一、概述

网站反爬虫的原因

  • 不遵守规范的爬虫会影响网站的正常使用
  • 网站上的数据是公司的重要资产
  • 爬虫对网站的爬取会造成网站统计数据的污染

常见反爬虫手段

1. 根据 IP 访问频率封禁 IP

2. 设置账号登陆时长,账号访问过多封禁
设置账号的登录限制,只有登录才能展现内容
设置账号登录的时长,时间一到则自动退出

3. 弹出数字验证码和图片确认验证码
爬虫访问次数过多,弹出验证码要求输入

4. 对 API 接口的限制
每天限制一个登录账户后端 api 接口的调用次数
对后台 api 返回信息进行加密处理

二、nginx反爬设置

站点配置文件

因为user-agent带有Bytespider爬虫标记,这可以通过Nginx规则来限定流氓爬虫的访问,直接返回403错误。
修改对应站点配置文件(注意是在server里面)

添加红色部分

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  index index.html index.htm index.nginx-debian.html;

  server_name _;

  location / {
    try_files $uri $uri/ =404;
  }
  #forbidden Scrapy
  if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
    return 403;
  }

  #forbidden UA
  if ($http_user_agent ~ "Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|python-requests|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {

    return 403;
  }
  #forbidden not GET|HEAD|POST method access
  if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
  }
}

附录:UA收集

Nginx反爬虫: 禁止某些User Agent抓取网站 Nginx反爬虫: 禁止某些User Agent抓取网站

FeedDemon             内容采集
BOT/0.1 (BOT for JCE) sql注入
CrawlDaddy            sql注入
Java                  内容采集
Jullo                 内容采集
Feedly                内容采集
UniversalFeedParser   内容采集
ApacheBench           cc攻击器
Swiftbot              无用爬虫
YandexBot             无用爬虫
AhrefsBot             无用爬虫
YisouSpider           无用爬虫(已被UC神马搜索收购,此蜘蛛可以放开!)
jikeSpider            无用爬虫
MJ12bot               无用爬虫
ZmEu phpmyadmin       漏洞扫描
WinHttp               采集cc攻击
EasouSpider           无用爬虫
HttpClient            tcp攻击
Microsoft URL Control 扫描
YYSpider              无用爬虫
jaunty                wordpress爆破扫描器
oBot                  无用爬虫
Python-urllib         内容采集
Python-requests       内容采集
Indy Library          扫描
FlightDeckReports Bot 无用爬虫
Linguee Bot           无用爬虫
使用python验证

View Code

python验证

使用requests模块

import requests
# 最基本的不带参数的get请求
r = requests.get('http://192.168.28.229')
print(r.content)

使用urllib模块

import urllib.request
response = urllib.request.urlopen('http://192.168.28.229/')
print(response.read().decode('utf-8'))

返回403就表示起作用了。

b'<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body>\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n'

三、整站防护设置

示意图

Nginx反爬虫: 禁止某些User Agent抓取网站

第一层

robots.txt

robots是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。

注意:它只是做了协议规定,是否允许将爬取的数据收录,不影响网页访问。

备注:对于手动写爬虫技术人员而言,一般都是直接忽略掉的。

如果不允许所有的爬虫蜘蛛访问,内容如下:

User-agent: *
Disallow: /

第二层

useragent特征拦截

因为user-agent带有Bytespider爬虫标记,这可以通过Nginx规则来限定流氓爬虫的访问,直接返回403错误。

具体操作,请查看上面的nginx配置。

备注:这样可以防止一部分爬虫访问,以及初级爬虫人员。

第三层

JS发送鼠标点击事件

有些网站,你从浏览器可以打开正常的页面,而在requests里面却被要求输入验证码或者是重定向到其他的页面。
原理:当点击登录时,触发js加密代码,复杂的加密算法参数+时间戳+sig值,后台进行 参数+时间的限制。验证成功后,才可以登录。

备注:爬虫高手需要模拟浏览器行为,加载js代码以及图片识别,才能正常登陆。

第四层

后台接口限制

1. 根据 IP 访问频率封禁 IP(注意:频率要控制好,否则容易误伤。)
2. 设置账号登陆时长,账号访问过多封禁。
    设置账号的登录限制,只有登录才能展现内容 设置账号登录的时长,时间一到则自动退出
3.弹出数字验证码和图片确认验证码
    爬虫访问次数过多,前端弹出验证码要求输入
4.对 API 接口的限制
    每天的登录账户,请求后端 api 接口时,做调用次数限制。对后台 api 返回信息进行加密处理

通过这4层设置,就可以有效的保护数据的安全了。

本文参考链接:

https://www.cnblogs.com/itsharehome/p/11114588.html
https://www.cnblogs.com/tulintao/p/11616640.html
https://www.cnblogs.com/JinZL/p/11738245.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
菜鸟阿都 菜鸟阿都
3年前
创建免费ip代理池
&ensp;&ensp;&ensp;&ensp; 反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
3年前
反爬虫策略手把手教你使用FastAPI来限制接口的访问速率
在网络爬虫的过程中,我们都会遇到各种各样的反爬虫,封禁IP和账号,设置验证码,前端加密,浏览器指纹,甚至输出假数据来等等都是可能出现的反爬手段,这些我们今天一个也不会谈及,而是谈谈一种叫访问速率限制的手段。对于服务端而言,有时候会碰到这么一个场景:某个接口需要在某个时间段内设置最高的访问次数来降低服务器的压力,比如之前用的某度的一些接口,一分钟内访问
Stella981 Stella981
3年前
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定
爬虫中使用代理IP的一些误区
做为爬虫工作者在日常工作中使用爬虫多次爬取同一网站时,经常会被网站的IP反爬虫机制给禁掉,为了解决封禁IP的问题通常会使用代理IP。但也有一部分人在HTTP代理IP的使用上存在着误解,他们认为使用了代理IP就能解决一切问题,然而实际上代理IP不是万
爬虫代理IP是什么?为什么需要它?
爬虫代理IP是什么?为什么需要它?爬虫代理IP是指使用其他计算机的网络地址来访问目标网站的一种技术。它可以隐藏爬虫程序的真实IP地址,避免被网站识别和封禁12。在进行网络数据采集时,我们经常会遇到一些反爬措施,比如网站限制同一个IP地址的访问频率、次数或时
python爬取数据中的headers和代理IP问题
爬虫的主要爬取方式之一是聚焦爬虫,也就是说,爬取某一个特定网站或者具有特定内容的网站,而一般比较大的有价值的网站都会有反爬策略,其中常见的反爬策略是网站根据来访者的身份判定是否予以放行。对来访者身份的判定一般基于headers里的userAgent值,每一
深度解析Python爬虫中的隧道HTTP技术
前言网络爬虫在数据采集和信息搜索中扮演着重要的角色,然而,随着网站反爬虫的不断升级,爬虫机制程序面临着越来越多的挑战。隧道HTTP技术作为应对反爬虫机制的重要性手段,为爬虫程序提供了更为灵活和隐蔽的数据采集方式。本文将探讨Python爬虫中的隧道HTTP技