专栏首页python3Nginx反爬虫: 禁止某些User Agent抓取网站

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

一、概述

网站反爬虫的原因

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

常见反爬虫手段

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收集

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验证

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'

三、整站防护设置

示意图

第一层

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python爬虫-01:爬虫的概念及分类

    1.定义: 搜索引擎用的爬虫系统 2.目标: 把所有互联网的网页爬取下来,放到本地服务器形成备份,在对这些网页做相关处理(提取关键字,去除广告),最后提供一个...

    py3study
  • Python爬虫教程-34-分布式爬虫介

    这是经典的主从分布式爬虫结构图,图中的控制节点ControlNode就是上面提到的master,爬虫节点SpiderNode就是上面提到的slave。下面这...

    py3study
  • Python微型异步爬虫框架

    Python微型异步爬虫框架(A micro asynchronous Python website crawler framework)

    py3study
  • 关于Python爬虫,这里有一条高效的学习路径

    如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,...

    Python进阶者
  • Python爬虫从入门到放弃(二十二)之 爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防...

    coders
  • 【程序源代码】python爬虫

    多种电商商品数据爬虫,整理收集爬虫练习。每个项目都是成员写的。通过实战项目练习解决一般爬虫中遇到的问题。通过每个项目的 readme,了解爬取过程分析。对于精通...

    程序源代码
  • 你的票被“虫子”吃了

    不到两个月,2018年春节要来了。 “今年我得早下手,抢张回家的低价机票。”在北京打工的小王对科技日报记者说,由于老家在云南,春节机票太贵,他都选择坐两天两夜的...

    企鹅号小编
  • 回家的低价票难抢?注意!可能是被“爬虫”吃了

    不到两个月,2018年春节要来了。 “今年我得早下手,抢张回家的低价机票。”在北京打工的小王对科技日报记者说,由于老家在云南,春节机票太贵,他都选择坐两天两夜的...

    企鹅号小编
  • 推荐一条高效的Python爬虫学习路径!

    如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,...

    python学习教程
  • 干货 | 关于反爬虫,看这一篇就够了

    你被爬虫侵扰过么?当你看到“爬虫”两个字的时候,是不是已经有点血脉贲张的感觉了?千万要忍耐,稍稍做点什么,就可以在名义上让他们胜利,实际上让他们受损失。 一、为...

    携程技术

扫码关注云+社区

领取腾讯云代金券