如何用Flask和Redis来动态维护Cookies池

为什么要用Cookies池

  • 目标网站需要登录才能爬取,例如新浪微博。
  • 爬取过程中,如果请求频率过高,会导致封号。
  • 这就需要维护多个账号的Cookies池实现大规模爬取。

Cookies池的要求

  • 自动登录更新
  • 定时验证筛选
  • 提供外部接口

Cookies池的架构

在这里插入图片描述
首先,需要有一个账号队列,把一些账号密码存到数据库里,生成器即程序从队列里面拿出账号密码,自动地进行登录,并获取登录的Cookies,然后放到Cookies队列里。定时检测器从Cookies队列里定期地随机选出一些Cookies,并用这些Cookies请求网页,如果请求成功就放回队列,否则从队列里剔除,这样就能做到实时更新,保证Cookies队列里的Cookies都是可用的。此外,还需要提供一个API接口,使外部程序能够从队列里获取到Cookies。

Cookies池的实现

源码可以参考:

https://github.com/Germey/CookiesPool
https://github.com/Python3WebSpider/CookiesPool
在这里插入图片描述
我们从github上下载这个项目并且在pycharm中打开。
首先需要安装必要的依赖:
pip3 install -r requirements.txt
然后需要在config.py文件中配置数据库:
在这里插入图片描述
这个需要根据实际情况配置了。
接下来要将微博小号导入到数据库中。
微博小号可以到网站上购买(现在某宝似乎搜不到了,可以用百度找,3、4毛钱一个小号,安全起见可以先购买少量进行尝试)。
运行importer.py后,将账号密码批量复制到命令行中,回车即可实现导入数据库:
在这里插入图片描述
之后可以在Redis中看到对应的数据:
在这里插入图片描述
因为使用小号登录时,会需要输入验证码,为了效率,我们需要通过“云打码”这个平台的协助来实现自动打码,网址:http://www.yundama.com/。注册之后,将账号密码信息配置到config.py:
在这里插入图片描述
并且可以在账号中充值少量的金额,作为打码的花费(一张新浪的验证码花费为1分钱多一点儿)。

config.py文件中,定义了一些参数,下方有三个进程开关:
在这里插入图片描述
当需要使用某个进程时,把参数设置为True即可。
如果以上步骤都准备好了,我们可以同时把所有进程的开关都打开,然后运行run.py
在这里插入图片描述
可以看到生成器开始工作,如果数据库中的账号没有cookies信息,那么就会取出这个账号进行登录,登录成功后的cookie会保存下来,同时验证器会对已经保存的cookies进行验证。
在这里插入图片描述
全部生成完毕后效果如下:
在这里插入图片描述
所有账号的cookies都已经生成并保存了。
这个cookies池的实现,为之后大规模的爬取做好了准备。
需要注意的是:

  • 新浪小号安全性不高,指不定什么时候就不能用了。
  • 生成cookies的时候,新浪有可能因为同ip登录次数过多而拒绝登录,那么程序就会在下个周期再次试验,所以全部账号都成功获取cookies需要花费一定的时间。
  • 同ip登录太多账号有可能导致封号,所以可以与代理池配合起来使用。
  • Cookies池实现的具体细节可以阅读源代码。
  • 程序提供了扩展接口,如果要实现别的网站的cookies池,可以到配置文件以及具体函数中进行添加。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值