1 反爬虫策略
目前大部分网站都已经部署了反爬虫策略,常见的反爬虫策略与爬虫的应对策略如下
反爬虫策略 | 应对策略 |
---|---|
服务器发现user-agent都是python | 设置随机user-agent |
禁止同一IP的多次访问 | 设置随机IP代理池 |
需要登录才能访问 | 访问时添加cookies或token |
设置验证码识别 | 设置随机user-agent |
设置动态加载网站,数据通过js加载 | 通过selenium和phantomjs模拟浏览器操作 |
表格中的前三项都可以通过自定义scrapy的中间件middleware来实现设置随机user-angent,随机ip代理和cookies
2 middleware介绍
官网给出的middleware介绍,官网地址
DownloaderMiddleware
DownloaderMiddleware是位于引擎和下载器之间的特定挂钩,处理从引擎传递到下载器request,以及从下载器传递到引擎的response。
如果需要执行以下操作之一,请使用DownloaderMiddleware:
- 在将request发送到下载器之前处理request(scrapy将request发送到网站之前);
- 在将接收到的response传递给spider之前,先对其进行更改;
- 发送新的request,而不是将接收到的响应传递给spider;
- 将response传递给spider,而无需获取网页;
- 默默地丢弃一些request。
SpiderMiddleware
SpiderMiddleware是位于引擎和蜘蛛之间的特定挂钩,并且能够处理spider的输入(response)和输出(request和item)
如果需要执行以下操作之一,请使用SpiderMiddleware:
- spider回调的parse方法中的输出内容处理-----更改/添加/删除request或item;
- 处理start_requests;
- 处理spider异常;
- 根据响应内容,对某些request调用errback而不是回调。
如上面的中间件介绍,类似于设置user-agent,代理ip和cookies都可以在downloadermiddleware中实现,
使用downloadermiddleware时必须激活这个DOWNLOADERMIDDLEWARES (注意不是SpiderMiddleware),它是在settings.py文件中设置DOWNLOADER_MIDDLEWARES字典中,例如:
DOWNLOADERMIDDLEWARES = {
‘myproject.middlewares.Custom_A_DownloaderMiddleware’: 543,
‘myproject.middlewares.Custom_B_DownloaderMiddleware’: 643,
‘myproject.middlewares.Custom_B_DownloaderMiddleware’: None,
}
DownloaderMiddleware的数字越小,越靠近引擎,数字越大越靠近下载器,所以数字越小的,process_request()优先处理;数字越大的,process_response()优先处理;若需要关闭某个中间件直接设为None即可
3自定义downloadermiddleware
通过自定义middleware实现设置随机use-agent,随机ip代理,设置cookies,自定义downloadermiddleware的介绍可以参考官网介绍,官网地址
同样的我们也可以在middleware中设置请求重试,对接selenium,以及处理异常等方法,具体方式可以参考这里
下面是自定义的一个设置随机use-agent,随机ip代理,设置cookies的中间件,我们也可以直接在自带的downloaderm