爬虫与反爬,反爬虫计策

银河国际点击登录,目前遇到的反爬主要有以下几种

搜寻了大多数资料,反爬虫策略只是为了让爬虫更复杂,更麻烦,目前貌似没有能一劳永逸的方案。

  1. 访问频率
  2. 登录限制
  3. 通过Head封杀
  4. JavaScript脚本动态获取网站数据
  5. 验证码
  6. IP限制
  7. 网站内容反爬

以下的策略只是增加爬虫的难度,增加爬虫成本。

1.访问频率

如果访问一个网站过于频繁,网站后台管理可能会针对IP封锁一段时间。那么解决的方法就是有间隔的进行控制时间爬取,比如搞个随机数进行sleep,sleep不同的间隔,那么网站就识别不出是爬虫了,千万不要间隔一样的时间,有规律的时间间隔访问很容易就被网站识别出是人为的啦,可以借用scrapy框架中的setting文件中的智能算法,采用没有规律的时间间隔访问。

1.Headers限制

银河国际点击登录 1

检查User-Agent属性,判断是否为浏览器访问。

检查Referer属性,判断来源。

2.登录限制

有些网站需要登录才能看到页面,如果进行爬虫的话,可以通过模拟登录就像浏览器一样,然后通过cookie记住登录状态,每次进行访问都携带者所需要的cookie过去,所以这种反爬机制也很容易解决。

以下是网上收集的获取不到HTTP_REFERER值的情况:

① 在浏览器内直接敲URL

② windows桌面上的超链接图标

③浏览器内书签

④第三方软件(如Word,Excel等)内容中的链接

⑤SSL认证网站跳入

⑥;
meta页面设置自动跳转时,在example.com将取不到REFERER URL

⑦使用JavaScript的Location.href或者是Location.replace()

这应该是最常见的,最基本的反爬虫手段,主要是初步判断你是否是真实的浏览器在操作。

3.通过Head封杀

我们进行网页爬取的时候,会通过HTTP请求,HTTP请求包含请求头和请求体,有些网站会根据请求头部Head信息进行反爬虫封杀IP,比如可以通过请求头部的User-Agent来判断是否为爬虫还是浏览器。每个网站有一个robots.txt,一般都在服务器的根目录下,比如下面百度的,这个文件的作用是允许不同爬虫可以爬取不同目录下的文件的权限。

银河国际点击登录 2

当然我们爬虫不会傻傻的告诉网站我们是爬虫,一般都会通过修改User-Agent字段的值来伪造成浏览器。所以这种反爬机制也容易对付。

2.IP限制

限制IP也是很多网站反爬虫的初衷,有些人随便写一个循环,就开始暴力爬取
,确实会给网站服务器带来很大的负担,而这种频繁的访问,显然也不会是真实用户行为,索性果断把你封掉。

当然,攻击者可以通过不断换IP的形式来绕过这种限制。而且封IP会流失用户,一般情况下不会采取。

4.JavaScript脚本动态获取网站数据

现在网站大多都是通过这种方式来返回数据给用户,也是主要的反爬虫机制。网站利用ajax异步请求来获得数据,可以增加一定程度的爬虫难度。但不管怎么样,服务器能够返回数据给浏览器就说明浏览器要发送HTTP的请求,那么主要找到所请求的URL就可以得到想要的数据,不然就采用自动化selenium方式来获得数据。

3.动态加载

通过异步加载,一方面是为了反爬虫,一方面也可以给网页浏览带来不同的体验,实现更多的功能。很多动态网站都是通过ajax或者JavaScript来加载请求的网页。

5.验证码

这种方式难度就大了,验证码是专门用来区分人和机器的手段,目前能想到的一种方法是通过图像识别来识别出验证码。但是能够做到图像识别的,不是很容易的。

4.验证码

给用户请求次数加一个阀值,超过该阀值,弹出验证码界面。

6.IP限制

网站可能会将IP永久封杀掉,但是还是想继续访问的话,只能通过改变ip咯,改变ip的话就得用到IP代理,不过ip代理分两种,一种是透明代理,网站可以知道真实ip,另一种是高匿代理,网站无法获得访问的真实IP。可以借用西祠代理网站提供的免费代理。不过有一些是已经失效的。

5.返回伪造的信息

确定该请求为爬虫请求后,返回虚假混乱的数据增加筛选复杂度。

以下是引用sexycoder的观点:

反爬虫最基本的策略:

1.检查浏览器http请求里面的user-agent字段

2.检查http请求的referer(即当前的这个页面是从哪个页面跳转过来的)

爬虫策略:

这两个都是在http协议的报文段的检查,同样爬虫端可以很方便的设置这些字段的值,来欺骗服务器。

反爬虫进阶策略:

1.像知乎一样,在登录的表单里面放入一个隐藏字段,里面会有一个随机数,每次都不一样,这样除非你的爬虫脚本能够解析这个随机数,否则下次爬的时候就不行了。

2.记录访问的ip,统计访问次数,如果次数太高,可以认为这个ip有问题。

爬虫进阶策略:

1.像这篇文章提到的,爬虫也可以先解析一下隐藏字段的值,然后再进行模拟登录。

2.爬虫可以使用ip代理池的方式,来避免被发现。同时,也可以爬一会休息一会的方式来降低频率。另外,服务器根据ip访问次数来进行反爬,再ipv6没有全面普及的时代,这个策略会很容易造成误伤。

反爬虫进进阶策略:

1.数据投毒,服务器在自己的页面上放置很多隐藏的url,这些url存在于html文件文件里面,但是通过css或者js使他们不会被显示在用户看到的页面上面。(确保用户点击不到)。那么,爬虫在爬取网页的时候,很用可能取访问这个url,服务器可以100%的认为这是爬虫干的,然后可以返回给他一些错误的数据,或者是拒绝响应。

爬虫进进阶策略:

1.各个网站虽然需要反爬虫,但是不能够把百度,谷歌这样的搜索引擎的爬虫给干了(干了的话,你的网站在百度都说搜不到!)。这样爬虫应该就可以冒充是百度的爬虫去爬。(但是ip也许可能被识破,因为你的ip并不是百度的ip)

反爬虫进进进阶策略:

给个验证码,让你输入以后才能登录,登录之后,才能访问。

爬虫进进进阶策略:
图像识别,机器学习,识别验证码。不过这个应该比较难,或者说成本比较高。  

7.网站内容反爬

有一些网站将网站内容用只有人类可以接收的形式来呈现。比如将内容用图片的形式显示。这时候又得通过图像识别等方式啦,难度还是挺大的嘛!

总结:

不过怎么样,爬虫和反爬虫之间就是典型的攻防不同升级的斗争。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website