Scrapy爬虫反ban的技巧
Scrapy爬虫反ban的技巧
Scrapy爬虫反ban的技巧
根据scrapy官方文档
里面的描述,要防止scrapy被ban,主要有以下几个策略。
动态设置user agent
禁用cookies
设置延迟下载
使用代理IP地址池
使用Crawlera
由于cache受国内网络的影响,不考虑使用;Crawlera的分布式下载,我们可以在下次用一篇专门的文章进行讲解。所以本文主要从动态随机设置user agent、禁用cookies、设置延迟下载和使用代理IP这几个方式。
创建中间件(middlewares.py)
类RandomUserAgent主要用来动态获取user-agent,user-agent列表USER_AGENTS在 settings.py中进行配置。
类ProxyMiddleware用来切换代理,proxy列表PROXIES也是在settings.py中进行配置。
常见 User-Agent 配置
在settings.py中设置
USER_AGENTS = [ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727;"]
代理设置 PROXIES 在settings.py
常见的代理ip网站 http://www.xicidaili.com/
其他设置
禁用cookies
COOKIES_ENABLED=False
设置下载延迟
观察别人的反爬措施
异常访问行为分析
异常行为就比较多了:
user_agent不是App或者浏览器。例如使用了Scrapy或者HttpClient,这个比较初级,一般都会修改User Agent。
短时间内大量访问。人的访问节奏一秒中能够点击5次就不得了了(游戏高手能有300到400的点击率就是旷世高手了)。
顺序访问相关信息。比如顺序访问理财产品的信息,包括投资人,还款计划等;因为程序一般使用循环,而人会跳跃。
定时访问。定时有可能是每日,也可能是每小时,因为爬虫是定时任务,因此比较有规律。
我们在反爬虫的过程中,发现了一个很有意思的方式,屡试不爽:
过去若干时间内独立用户按照访问请求数(count)进行排序;
排序的方法是该用户访问不同url的次数(URL unique count);
如果某个独立用户的访问请求数是它前面或者后面独立用户访问请求数的若干分之一或者几倍(阈值需要根据自己网站定义),那么该独立用户就很有可能是爬虫。
这里就主要利用了异常行为的第三点(遍历大量URL,而一般用户只会访问少数链接)进行,用ELK能够很容易实现。
以上的异常行为更多是统计分析,还有一些可以通过数据挖掘的方式进行分析。例如找一些用户使用我们的网站或者App,得到用户访问的日志,这样我们就能够构建用户访问URL的关联规则或者图(因为网页也好,应用也好,用户总是在打开保护B页面链接的A页面后才能访问B页面,因此存在关联关系)。
当然还有其他很多通过代理Ip进行数据挖掘的方法,有待进一步挖掘。
根据scrapy官方文档
里面的描述,要防止scrapy被ban,主要有以下几个策略。
动态设置user agent
禁用cookies
设置延迟下载
使用代理IP地址池
使用Crawlera
由于cache受国内网络的影响,不考虑使用;Crawlera的分布式下载,我们可以在下次用一篇专门的文章进行讲解。所以本文主要从动态随机设置user agent、禁用cookies、设置延迟下载和使用代理IP这几个方式。
创建中间件(middlewares.py)
类RandomUserAgent主要用来动态获取user-agent,user-agent列表USER_AGENTS在 settings.py中进行配置。
类ProxyMiddleware用来切换代理,proxy列表PROXIES也是在settings.py中进行配置。
常见 User-Agent 配置
在settings.py中设置
USER_AGENTS = [ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727;"]
代理设置 PROXIES 在settings.py
常见的代理ip网站 http://www.xicidaili.com/
其他设置
禁用cookies
COOKIES_ENABLED=False
设置下载延迟
观察别人的反爬措施
异常访问行为分析
异常行为就比较多了:
user_agent不是App或者浏览器。例如使用了Scrapy或者HttpClient,这个比较初级,一般都会修改User Agent。
短时间内大量访问。人的访问节奏一秒中能够点击5次就不得了了(游戏高手能有300到400的点击率就是旷世高手了)。
顺序访问相关信息。比如顺序访问理财产品的信息,包括投资人,还款计划等;因为程序一般使用循环,而人会跳跃。
定时访问。定时有可能是每日,也可能是每小时,因为爬虫是定时任务,因此比较有规律。
我们在反爬虫的过程中,发现了一个很有意思的方式,屡试不爽:
过去若干时间内独立用户按照访问请求数(count)进行排序;
排序的方法是该用户访问不同url的次数(URL unique count);
如果某个独立用户的访问请求数是它前面或者后面独立用户访问请求数的若干分之一或者几倍(阈值需要根据自己网站定义),那么该独立用户就很有可能是爬虫。
这里就主要利用了异常行为的第三点(遍历大量URL,而一般用户只会访问少数链接)进行,用ELK能够很容易实现。
以上的异常行为更多是统计分析,还有一些可以通过数据挖掘的方式进行分析。例如找一些用户使用我们的网站或者App,得到用户访问的日志,这样我们就能够构建用户访问URL的关联规则或者图(因为网页也好,应用也好,用户总是在打开保护B页面链接的A页面后才能访问B页面,因此存在关联关系)。
当然还有其他很多通过代理Ip进行数据挖掘的方法,有待进一步挖掘。
yongbuyanbai2- 帖子数 : 5146
注册日期 : 12-08-31
您在这个论坛的权限:
您不能在这个论坛回复主题