四时宝库

程序员的知识宝库

分布式爬虫实例,爬取知乎全站系列四(middlewares与反反爬)

摘要:本篇是分布式爬取知乎全站系列四,主要是middlewares的简介、解耦、代码,以及反反爬。

一、scrapy中middlewares简介

middlewares即中间件,主要作用有三:

1. 在爬虫发出请求前进行预处理,由process_request()函数负责。

2. 在爬虫解析回复前进行预处理,由process_response()函数负责。

3. 处理中间件抛出的异常,由process_exception()函数负责。

以上是中间件最重要的三个函数。

二、中间件的解耦

不同处理的代码分开写在不同的中间件,逻辑清晰,利于维护和阅读。

如上图,一共三个中间件。执行顺序由settings.py中的数值从小到大。

注意,上述是正常情况的执行顺序,实际根据返回值的不同而不同。

对于Process_request()来说,见下图

其余2个函数类似,具体请查阅scrapy官方文档。

三、middlewares的Python代码

0.导入相关模块

1.UserAgent中间件的Python代码

2.Author中间件的Python代码

process_response函数

说明:

a.有些代理服务器或目标服务器无论是否错误,都会返回200,则需判断是否真正是200。

b.404即请求资源不存在,因此直接忽略请求

c.401、403则更新authorization,并返回请求重新调度

d.其它错误直接返回请求,重新调度

3.proxy中间件的代码,主要就是随机更换代理服务器。

说明:

a.个人在爬取知乎时使用了稳定的代理ip,因此无需维护和更换代理ip。

b.代理ip请自行购买或者爬取,爬取时需自行维护代理池。

c.常写爬虫的手头都会有大量的代理ip。

四、关于反反爬

从以上可以看出,爬取知乎时的反反爬手段:

1. 更换User-Agent

2. 更换authorization。

2.1 每个知乎用户每次登陆时都会有一个authorization。

2.2 知乎通过authorization限速。

2.3 账户越多显然越快(80个账户)。

2.4 爬取过快需要验证码验证:1,自写代码识别;2,打码平台识别;3,人工智能训练模型识别。

爬取知乎可用打码平台识别。

3. 更换代理服务器。

爬取代理ip请参考网络爬虫之代理服务器反反爬

4. settings.py需要反复调试速度。不同数量的账户和代理ip爬取速度不同。

五、关于更换authorization,相信一路跟着教程的朋友都可以实现。

请点赞支持! 如有疑问请评论区留言,

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接