Fork me on GitHub

爬虫开发笔记之cookies池系统设计

开发爬虫时,我们总希望目标网站反爬策略不足,一气呵成写好爬虫代码并部署运行,然而“理想很丰满,现实很骨感”,在爬虫大行其道的今日,稍微优质一点的信息类网站一般都会采取一定程度的反爬措施。不然小公司的服务器哪里扛得住各路爬虫orz…..不过,对于爬虫开发者来说,自然是“道高一尺,魔高一丈”,今日就简单聊聊反反爬方案——cookies池系统

什么是cookies池

用于维护多条目标站点的有效cookie以便爬虫获取使用的服务(类似IP池)。

为什么需要设计cookie池

  1. 目标站点要求登录才能访问(如:知乎、淘宝、facebook, etc.)
  2. 单账号会受到访问频率限制(多账号管理)
  3. 模拟登录逻辑复杂 (将模拟登录单独做成服务)
  4. 登录脚本采用不同编程语言开发(如:node.js的puppeteer, javascript的cypress)
  5. 一些第三方库不支持同一种语言的不同版本(如:zheye对python3.6和python3.7)

cookie池的优点

  1. 服务分离:多语言开发,类似微服务的理念。
  2. 组件分离:比如redis可以换成mysql、Kafka等。
  3. 各个服务分别部署:防止网站变化导致爬虫宕机。

cookie池系统设计架构

一个简易的cookie池系统架构如下图所示:

cookie_pool_arch

首先,最基本的功能是通过模拟登录服务获取cookie。

其次,因为cookie正常情况下都有过期时间,为保证cookie池系统独立稳定运行,需要实现Cookie检测服务。

然后,通过检测的有效cookie存入Redis中,以备爬虫运行时获取。

实现cookie池系统面临的挑战

  1. 如何发现cookie池不够用。
  2. 各个网站的cookie如何分开管理,代码如何更好的分离。
  3. 如何及时发现某个cookie失效了。
  4. 如何保证新加入的网站快速接入cookie池系统。
  5. 如何统一管理配置。

只抛出问题不解决问题不是一个好习惯,今日限于篇幅只是做简要介绍,后续实现改日再写。

-------------  Fin    Thanks for reading!  -------------

本文标题:爬虫开发笔记之cookies池系统设计

文章作者:TesterCC

发布时间:2020年03月18日 - 16:03

最后更新:2020年03月18日 - 16:03

原始链接:http://blog.fullstackpentest.com/crawler-cookie-pool.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。