Scrapy的middleware详细教程

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值