爬虫原理及反爬虫机制

  • 关于爬虫
    • 爬虫原理
    • 反爬虫机制
      • 1.检验数据头User-Agent反爬虫机制解析:
      • 2.访问频率限制或检验
      • 3.蜜罐技术
    • 反爬虫机制的应对方法
      • 1.设定Request Headers中的User-Agent
      • 2.设定随机访问频率
      • 3.代理IP或者分布式爬虫
      • 3.对于蜜罐技术可以采用定向爬虫

关于爬虫

爬虫原理

如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,

沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;

从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;

爬虫的基本流程:
模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中

反爬虫机制

1.检验数据头User-Agent反爬虫机制解析:

当我们使用浏览器访问网站的时候,浏览器会发送一小段信息给网站,我们称为Request Headers,在这个头部信息里面包含了本次访问的一些信息,例如编码方式,当前地址,将要访问的地址等等。这些信息一般来说是不必要的,但是现在很多网站会把这些信息利用起来。其中最常被用到的一个信息,叫做“User-Agent”。网站可以通过User-Agent来判断用户是使用什么浏览器访问。不同浏览器的User-Agent是不一样的,但都有遵循一定的规则。
但是如果我们使用Python的Requests直接访问网站,除了网址不提供其他的信息,那么网站收到的User-Agent是空。这个时候网站就知道我们不是使用浏览器访问的,于是它于是它就可以拒绝我们的访问。

2.访问频率限制或检验

大多数情况下,我们遇到的是访问频率限制。如果你访问太快了,网站就会认为你不是一个人。这种情况下需要设定好频率的阈值,否则有可能误伤。如果大家考过托福,或者在12306上面买过火车票,你应该会有这样的体会,有时候即便你是真的用手在操作页面,但是因为你鼠标点得太快了,它都会提示你: “操作频率太快…”。
另外,还可以检验访问频率是否每一次都相同,如果都相同,那么一定是爬虫了.

3.蜜罐技术

蜜罐这个词,最早是来自于网络攻防中。一方会故意设置一个或者几个服务器,故意留下漏洞,让另一方轻易的入侵进来。这些被故意设置的服务器,就叫做蜜罐。里面可能安装了监控软件,用来监控入侵者。同时,蜜罐还可以拖延入侵者的时间。

在反爬虫的机制中,也有一种蜜罐技术。网页上会故意留下一些人类看不到或者绝对不会点击的链接。由于爬虫会从源代码中获取内容,所以爬虫可能会访问这样的链接。这个时候,只要网站发现了有IP访问这个链接,立刻永久封禁该IP + User-Agent + Mac地址等等可以用于识别访问者身份的所有信息。这个时候,访问者即便是把IP换了,也没有办法访问这个网站了。给爬虫造成了非常大的访问障碍。

反爬虫机制的应对方法

1.设定Request Headers中的User-Agent

检查User-Agent是一种最简单的反爬虫机制,而通过设定Request Headers中的User-Agent,可以突破这种机制。

2.设定随机访问频率

遇到访问频率限制可以采用设定随机访问频率的方式来突破.

3.代理IP或者分布式爬虫

另外,如果对页的爬虫的效率有要求,那就不能通过设定访问时间间隔的方法来绕过频率检查了,可以采用代理IP或者分布式爬虫:
代理IP访问可以解决这个问题。如果用100个代理IP访问100个页面,可以给网站造成一种有100个人,每个人访问了1页的错觉。这样自然而然就不会限制你的访问了。
分布式爬虫会部署在多台服务器上,每个服务器上的爬虫统一从一个地方拿网址。这样平均下来每个服务器访问网站的频率也就降低了。由于服务器是掌握在我们手上的,因此实现的爬虫会更加的稳定和高效。

3.对于蜜罐技术可以采用定向爬虫

由于定向爬虫的爬行轨迹是由我们来决定的,爬虫会访问哪些网址我们都是知道的。因此即使网站有蜜罐,定向爬虫也不一定会中招。

参考博客:
https://www.cnblogs.com/sss4/p/7809821.html
https://blog.csdn.net/lujuntong/article/details/81952519

爬虫原理及反爬虫机制以及反爬虫方法的应对策略相关推荐

  1. 爬虫反爬机制及反爬策略

    参考:https://www.cnblogs.com/LLBFWH/articles/10902533.html 爬虫是一种模拟浏览器对网站发起请求,获取数据的方法.简单的爬虫在抓取网站数据的时候,因 ...

  2. python爬虫进阶,突破反脚本机制(反爬机制)

    前言 相信大家在做爬虫或者自动化脚本时或多或少的都能遇到反爬机制(或者说反脚本机制),最常见的反脚本机制都是在登录时进行验证,据本人大量实战(帮粉丝写脚本)发现,基本上只要有点水平的网站都会有反脚本的 ...

  3. 和我一起学习爬虫之爬虫原理和网站基本知识

                                                      爬虫原理和网站基本知识 一.爬虫简介 1.为什么要做爬虫 1.1.数据的来源 首先请问:都说现在是' ...

  4. java的反射和反编译机制介绍

    <JAVA啃骨头>之 Java SE 章节 java的反射和反编译机制介绍 一 .什么是java反射机制 JAVA反射机制是指在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和 ...

  5. python爬虫从入门到放弃-python爬虫从入门到放弃(二)- 爬虫的深层原理

    上次说到了爬虫的基本原理.这次再深入的了解学习一下深层的本质. 因为本人属于小白,这两年接触的都是ETL.数据仓库.BI 方面的东西,故这里转载以为专业人士的爬虫原理,末尾有原文地址. 爬虫就是请求网 ...

  6. 爬虫(爬虫原理与数据抓取)

    爬虫(爬虫原理与数据抓取) 通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重 ...

  7. 10分钟python爬虫_python scrapy 入门,10分钟完成一个爬虫

    在TensorFlow热起来之前,很多人学习python的原因是因为想写爬虫.的确,有着丰富第三方库的python很适合干这种工作. Scrapy是一个易学易用的爬虫框架,尽管因为互联网多变的复杂性仍 ...

  8. python3反爬虫原理与绕过实战 网盘_Python 3反爬虫原理与绕过实战

    第 1章 开发环境配置 1 1.1 操作系统的选择 1 1.1.1 Ubuntu 简介 1 1.1.2 VirtualBox 的安装 2 1.1.3 安装 Ubuntu 3 1.1.4 全屏设置 8 ...

  9. url中能出现的字符_python爬虫,解决大众点评字符库反爬机制的经验

    刚开始写文章还希望大家可以喜欢,对于爬虫只是个人整理出的方法,爬虫大牛请嘴下留情.""仅限学术交流,如有冒犯请联系作者删除""话不多说,想分析天津地区餐饮行业的 ...

最新文章

  1. Tomcat5.5x+jndi配置
  2. academic division at cssa
  3. mysql scope runtime_Maven依赖scope属性详解-一个报错引发的问题 - 老郭种树
  4. 经典C语言程序100例之九二
  5. 细胞自动机 通用计算机,细胞自动机
  6. Matrix Decompressing UVA - 11082 最大流 + 输出方案
  7. 数论 欧几里得与扩展欧几里得
  8. Struts 1 和 Struts 2 的线程安全
  9. 动态库加载的函数总结
  10. JTable 的使用
  11. spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站...
  12. 悦保OCR识别,提供票据、卡证、保险场景识别新方案
  13. Oracle官方PLSQL学习网址
  14. ds6708 symbol 驱动_Symbol DS6708条码扫描器
  15. python实现税后工资_python税后工资计算器
  16. HTML项目立项,作为承建方,其项目立项的第一步工作是()。A.编制立项申请书B.项目论证C.项目 - 信管网...
  17. 【沃顿商学院学习笔记】商业基础——Financing:02 年金 Annuity
  18. 用python批量处理图片尺寸
  19. CCF201509-1数列分段(C语言)
  20. GPS+北斗定位借助Arduino的数值显示

热门文章

  1. java毕设项目网络游戏后台管理系统(附源码)
  2. 如何从零开始解读产品经理需求分析-需求挖掘
  3. mysql未定义_以mysql_开始的未定义引用错误_MySQL
  4. Windows下Visual Studio无法引入Python.h文件
  5. 什么是中间人攻击?如何抵御中间人攻击?
  6. 激活函数之tanh介绍及C++/PyTorch实现
  7. Cadence Allegro尺寸标注无法显示解决方法图文教程及视频演示
  8. HLS第十七课(pragma, array, data,)
  9. 【C/C++面试必备】面向对象与面向过程的区别
  10. 6种分布式事务最终一致性解决方案,一次性说清了!