首先来了解常见的反爬虫策略
1. robots.txt 协议
不强制,更像是约定 绅士些的爬虫都会遵循。
2. 后台对访问进行统计,如果单个IP访问超过阈值,予以处理。
可以分析ip的请求时间、频率、路径,排除白名单IP 和正常spider(baidu,google...)
有两个缺陷,一个是非常容易误伤普通用户,另一个就是,IP其实不值钱,几十块钱甚至有可能买到几十万个IP。
3. 后台对访问进行统计,如果单个session访问超过阈值,予以处理
这个看起来更高级了一些,但是其实效果更差,因为session完全不值钱,重新申请一个就可以了。
4. 后台对访问进行统计,如果单个userAgent访问超过阈值,予以处理。
这个是大招,类似于抗生素之类的,效果出奇的好,但是杀伤力过大,误伤非常严重
5. 以上的组合。
组合起来能力变大,误伤率下降,在遇到低级爬虫的时候,还是比较好用的。
** 6.加验证码**
直接封锁ip不友善,容易误伤,统计ip访问计数,单位时间超过阙值发送验证码
爬虫策略
本文只举了些许常见的爬虫策略,截图大部分为settings.py自带。
1.robots.txt rules
Robots协议更像是一种情怀, 需要强爬就设置
ROBOTSTXT_OBEY = False
2.请求时延
限制爬取速度,一方面能避免被反爬虫措施封禁,另一方面也能减轻对服务器的压力 编辑配置文件settings.py,设置
DOWNLOAD_DELAY = 3
也可加更多限制条件
3.禁用cookies
添加COOKIES_ENABLED = False
4.重写请求头
5. IP池
Settings.py同级目录下添加middlewares.py, middlewares.py 内容如下 只需加一个process_request 方法
并在settings.py中配置启动中间件
DOWNLOADER_MIDDLEWARES = {}
**6.随机切换userAgent **
伪装成浏览器之类,亦可加referer 配置文件settings.py 同级目录下新增下载中间件 rotate_useragent.py
加 下列代码
#UA池,更多UA头部可参考 http://www.useragentstring.com/pages/useragentstring.php
user_agent_list = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 ",
"(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 ",
"(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 ",
"(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 ",
"(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 ",
"(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 ",
"(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 ",
"(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ",
"(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 ",
"(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 ",
"(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
]
编辑配置文件settings.py,启用下载中间件
DOWNLOADER_MIDDLEWARES = {
'ip_proxy.rotate_useragent.RotateUserAgentMiddleware': 1,
}
7..实现分布式爬虫(还没试)
** 8.分析验证码结构,实现一些简单验证码的识别(还没试)**