爬虫实战7-应对反爬虫的策略

来源:互联网 发布:oracle删除重复数据 编辑:程序博客网 时间:2024/05/19 19:42

文章说明:本文是在学习一个网络爬虫课程时所做笔记,文章如有不对的地方,欢迎指出,积极讨论。

一、web服务器

服务器处理web请求


DNS:(Domain Name System)域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网。通过主机名,最终得到该主机对应的IP地址的过程叫做域名解析。DNS协议运行在UDP(UserDatagram Protocol,用户数据协议)协议之上,使用端口号53。

CDN:(Content Delivery Network)内容分发网络。其基本思路是尽可能避开有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处防止节点服务器所构成的现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间将用户的请求重新导向离用户最近的服务节点上。目的是使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。

端口映射(Port Mapping):是NAT(Network Address Translaton,网络地址转换)的一种,功能是把在公网的地址转翻译成私有地址,采用路由方式的ADSL(Asymmetric Digital Subscriber Line,非对称数字用户线路)宽带路由器拥有一个动态或固定的公网IP,ADSL直接在HUB或交换机上,所有的电脑共享上网。

EXT:(Extended File System)延伸文件系统。一种文件系统。

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器):一个PHPFastCGI管理器。


Servlet:(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容 

服务器处理web请求流程:

1、到达防火墙,对访问频次进行检查;  (host上的Firewall)

2、进行端口映射,到达对应的服务,例如Apache;

3、到达Apache,通过virtualhost 查找根目录;

4、查找.htaccess伪静态设置,映射实际目录及文件;

5、执行脚本或提取文件;

6、确认cookie信息,查找用户;

7、用户权限检查;

8、返回数据。

虚拟主机(Virtualhost):即Vhost,是Linux中的虚拟主机系统。是在同一台机器搭建属于不同域名或者基于不同IP的多个网站服务的技术,可以为运行在同一物理基期上的各个网站支配不同的IP和端口,也可让多个网站拥有不同的域名。

Session:会话控制。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

  Virtual host

定义:一台服务器主机可以处理多个域名或IP;将不同的域名及IP映射到不同的网站根目录

对爬虫的影响:不同的域名指向同一个服务器,更容易被服务器识别为爬虫(异常访问)而禁止;

对于一个域名映射多台服务器的网站,在单机上不能并发抓取不同服务器的数据

htaccess:HyperText Access(超文本入口)。htaccess文件(或者“分布式配置文件”)是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

伪静态:实际的文件系统结构与网络请求路径分离。相对于静态而言的。与静态相比:

1)从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是html/htm 或者是目录格式

2)伪静态只是改变了URL的表现形式,实际上还是动态页面

3)静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗

Inf文件:(Device INFormation File,设备信息文件)是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。在INF文件中指明了硬件驱动如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等等。

U盘病毒:又称Autorun病毒,就是通过U盘产生Autorun.inf进行传播的病毒。

Autorun.inf:是我们电脑使用中比较常见的文件之一,其作用是允许在双击磁盘时自动运行指定的某个文件。

路由过程:通常第一步是身份及权限检查。

二、网站如何发现爬虫

1)单一IP非常规的访问频次

2)单一IP非常规的数据流量

3)大量重复简单的网站浏览行为 (绝大多数情况,只有机器人才会做深翻页)

4)只下载网页,没有后续的js、CSS请求 (在应用层)

5)通过一些陷阱来发现爬虫,例如一些通过CSS对用户影藏的链接,只有爬虫才会访问

三、网站如何进行反爬

(一)UserAgent

假设我们已经确定了两类爬虫的UserAgent,它们分别是Nutch和Scrapy

User-Agent:Nutch

User-Agent:Scrapy

对应反爬虫的.htaccess文件定义:

BrowserMatchNoCaseNutch bad_bot

BrowserMatchNoCaseScrapy bad_bot

Order Deny,Allow

Deny fromenv=bad_bot

(二).htaccess  

(批量数据处理,通过大数据、机器学习的方式来去分析判断找出爬虫。即使访问频次不是很高,也有可能被发现。) 

1、Check access_log file   (网站下面访问请求的所有日志,还有error_log。如果一个IP请求的只有HTML,没有js、CSS的话,基本可以断定是爬虫)

2、OrderDeny,Allow   (统计一个IP在一天内一共请求了多少次)

(三)JavaScript

例如京东。大量使用动态网页,使得爬虫的爬取难度增加,常规手段只能拿到一个基本的HTML页面,重要的数据等信息都拿不到。

即使爬虫采用了web环境来渲染网页,也会大大增加爬虫的负担与爬取的时间。

同时,采用动态加载数据,大大降低服务器的负担。

(四)基于流量的拒绝

开启带宽(BandWidth)限制模块

LoadModule bw_module(带宽的检查)

设置访问的最大带宽,每个IP最大三个连接,最大1MB/s

(五)基于IP连接的拒绝   (Apatch里面配的)

1、some_folder目录每个IP最多1个同时的连接,不限制image/*目录的文件

2、/home/*/public_html目录限制仅限1个IP访问

(六)IPtables的控制

 IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

例如:Limit HTTPConnection Per IP / Host

例如:Limit HTTPConnection Per IP / Host Per Second

四、如何发现自己可能被网站识别了

1、CAPTCHApages (captcha,验证码)

2、Unusualcontent delivery delay  (响应时间、速度变慢了)

3、Frequentresponse with HTTP404,301 or 50x errors

(1)301 MovedTemporarily

(2)401unauthorized

(3)403forbidden  (aAatch处理的)

(4)404 notfound

(5)408 requesttimeout

(6)429 too manyrequests

(7)503 serviceunavailable  (ip层)

五、好的规避反爬虫检查的方法

(一)多主机策略;(客户端多主机或者服务器多主机)

(二)爬得慢一点,不要攻击主机,如果发现被阻止,立即降低访问频次,设计得smart一点,来找到访问频次限制的临界点;

(三)通过变换 IP 或 代理服务器 来掩饰;

很多网站在不同的地方都有不同的服务器(IP不同),这时即可通过动态切换IP去访问同一个网站,以解决访问频次或流量限制的问题。

寻找分布式服务器:“站长之家”网站里面查找一些网站的分布式服务器部署IP的情况,用IP进行访问。

在全球有很多站点,怎样获得站点?搜索“顶级域名”,把结果复制出来,即可。

动态IP切换技术:

1、模拟路由器登录(家里,IP都不是固定的。断开,隔5分钟再连接,IP就会不一样。封锁是基于IP的)

2、通过POSTMAN查找路由器的断线、重连接口

3、当发现IP被主机识别后,强制路由器断线、重连

(四)把爬虫放到访问频繁的主站IP的子网下,例如教育;

(五)频繁改变自己的User-Agent;

(六)探测陷阱,比如nofollow的tag,或者display:none的CSS;

aws(业务流程管理开发平台):AWS BPM业务流程管理开发平台是一个易于部署和使用的业务流程管理基础平台软件,AWS平台提供了从业务流程梳理、建模到运行、监控、优化的全周期管理和面向角色的BPMTotal Solution。

(七)如果使用了规则(pattern)来批量爬取,需要对规则进行组合;

(八)如果可能,按照Robots.txt定义的行为去文明抓取。