欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

程序员文章站 2022-03-20 21:32:04
但是,这个接口在没有登录的情况下会有请求频率检测。如果一段时间内访问太过频繁,比如打开这个链接,一直不断刷新,则会看到请求频率过高的提示,如下图所示。 一、本节目标 我们以新浪微博为例来实现一个Cookies池的搭建过程。Cookies池中保存了许多新浪微博账号和登录后的Cookies信息,并且Co ......

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

但是,这个接口在没有登录的情况下会有请求频率检测。如果一段时间内访问太过频繁,比如打开这个链接,一直不断刷新,则会看到请求频率过高的提示,如下图所示。

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

一、本节目标

我们以新浪微博为例来实现一个Cookies池的搭建过程。Cookies池中保存了许多新浪微博账号和登录后的Cookies信息,并且Cookies池还需要定时检测每个Cookies的有效性,如果某Cookies无效,那就删除该Cookies并模拟登录生成新的Cookies。同时Cookies池还需要一个非常重要的接口,即获取随机Cookies的接口,Cookies运行后,我们只需请求该接口,即可随机获得一个Cookies并用其爬取。

由此可见,Cookies池需要有自动生成Cookies、定时检测Cookies、提供随机Cookies等几大核心功能。

二、准备工作

搭建之前肯定需要一些微博的账号。需要安装好Redis数据库并使其正常运行。需要安装Python的RedisPy、requests、Selelnium、Flask库。另外,还需要安装Chrome浏览器并配置好ChromeDriver。

三、Cookies池架构

Cookies的架构和代理池类似,同样是4个核心模块,如下图所示。

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

四、Cookies池的实现

首先分别了解各个模块的实现过程。

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

2. 生成模块

生成模块负责获取各个账号信息并模拟登录,随后生成Cookies并保存。我们首先获取两个Hash的信息,看看账户的Hash比Cookies的Hash多了哪些还没有生成Cookies的账号,然后将剩余的账号遍历,再去生成Cookies即可。

这里主要逻辑就是找出那些还没有对应Cookies的账号,然后再逐个获取Cookies,代码如下:

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

3. 检测模块

我们现在可以用生成模块来生成Cookies,但还是免不了Cookies失效的问题,例如时间太长导致Cookies失效,或者Cookies使用太频繁导致无法正常请求网页。如果遇到这样的Cookies,我们肯定不能让它继续保存在数据库里。

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

4. 接口模块

生成模块和检测模块如果定时运行就可以完成Cookies实时检测和更新。但是Cookies最终还是需要给爬虫来用,同时一个Cookies池可供多个爬虫使用,所以我们还需要定义一个Web接口,爬虫访问此接口便可以取到随机的Cookies。我们采用Flask来实现接口的搭建,代码如下所示:

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

我们同样需要实现通用的配置来对接不同的站点,所以接口链接的第一个字段定义为站点名称,第二个字段定义为获取的方法,例如,/weibo/random是获取微博的随机Cookies,/zhihu/random是获取知乎的随机Cookies。

5. 调度模块

最后,我们再加一个调度模块让这几个模块配合运行起来,主要的工作就是驱动几个模块定时运行,同时各个模块需要在不同进程上运行,实现如下所示:

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

这里用到了两个重要的配置,即产生模块类和测试模块类的字典配置,如下所示:

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

Scheduler里将字典进行遍历,同时利用 eval() 动态新建各个类的对象,调用其入口run() 方法运行各个模块。同时,各个模块的多进程使用了multiprocessing中的Process类,调用其 start() 方法即可启动各个进程。

另外,各个模块还设有模块开关,我们可以在配置文件中*设置开关的开启和关闭,如下所示:

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

以上所示是程序运行的控制台输出内容,我们从中可以看到各个模块都正常启动,测试模块逐个测试Cookies,生成模块获取尚未生成Cookies的账号的Cookies,各个模块并行运行,互不干扰。

我们可以访问接口获取随机的Cookies,如下图所示。

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

爬虫只需要请求该接口就可以实现随机Cookies的获取。

五、本节代码

自从会了这招,我就再也不担心我的爬虫会被封了!搭建Cookies池

欢迎大家关注我的博客:https://home.cnblogs.com/u/sm123456/

 欢迎大家加入万人交流学习群:125240963