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

2023-11-10

为什么要用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池,可以到配置文件以及具体函数中进行添加。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用Flask和Redis来动态维护Cookies池 的相关文章

  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • VMWare15.5安装CentOS7.9

    一 创建虚拟机 创建虚拟机 选择自定义 高级 点击下一步 选择默认 点击下一步 选择 稍后安装操作系统 点击下一步 选择要安装的操作系统和版本 点击下一步 修改虚拟机名称和安装路径 点击下一步 根据需要设置处理器数量和内核数量 点击下一步
  • 006.设计原则与思想:规范与重构

    规范与重构 一 理论一 什么情况下要重构 到底重构什么 又该如何重构 1 重构的目的 为什么要重构 why 2 重构的对象 到底重构什么 what 3 重构的时机 什么时候重构 when 4 重构的方法 又该如何重构 how 二 理论二 为
  • elasticsearch-分词测试

    分词结果 tokens token 今天天气 start offset 0 end offset 4 type CN WORD position 0 token 今天 start offset 0 end offset 2 type CN
  • Android架构——ViewModel原理学习总结

    本文是楼主学习ViewModel 源码的一些总结 感觉ViewModel的源码是Android 三大架构中 最容易理解的一个了 本文ViewModel基于版本androidx lifecycle lifecycle viewmodel 2
  • Java - 表达数值的字符串(剑指offer)

    请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值 但是 12e 1a3 14 1 2 3 5 和 12e 4 3 都不是 剑指offer public
  • 100个Python小游戏,上班摸鱼我能玩一整年【附源码】

    哈喽铁子们 表弟最近在学Python 总是跟我抱怨很枯燥无味 其实 他有没有认真想过 可能是自己学习姿势不对 比方说 可以通过打游戏来学编程 今天给大家分享100个Python小游戏 一定要收藏 相关文件代码已上传 文末扫一下名片备注 游戏
  • Kettle实例-缺失值处理-去除缺失值

    1 通过使用Kettle工具 创建一个转换delete missing value 并添加 文本文件输入 控件 字段选择 控件 过滤记录 控件 Excel输出 控件 空操作 什么也不做 控件以及Hop跳连接线 2 单击 浏览 按钮 选择要去
  • 多线程(一):通俗易懂的理解线程和进程

    目录 计算机常识 什么是程序 什么是进程 什么是线程 如果理解线程切换 程序和CPU的常识 线程切换过程 普及几个线程面试题 和以上说过的知识相关 1 单核CPU设定多线程是否有意义 2 工作线程数是不是设置越大越好 3 工作线程数 线程池
  • echarts自定义多根柱子在一起柱状图/条形图

    先看效果 与单一柱状图相比 多柱子的多定义了几个series的值 legend值 注意的是 这东西叫图例标记 是legend下面的参数 看代码 div style width 100 height 240px div
  • 史上最全的java随机数生成算法(转)

    转自 http www zuidaima com share 1585762703215616 htm package com test util import java util Random public class RandomUti
  • 关于elasticsearch与kibana、IK分词器

    初识elasticsearch 正向索引和倒排索引 什么是文档和词条 每一条数据就是一个文档 对文档中的内容分词 得到的词语就是词条 elasticsearch就是面对文档存储的 可以是数据库中的一条商品数据 一个订单信息 文档数据会被反序
  • 找出字符串中第一次出现一次的字符的算法。

    链接 https www nowcoder com questionTerminal d370c322d06945a5901e8436d1e2e681 orderByHotValue 1 page 1 onlyReference false
  • 我为什么要学习Rust

    最早接触到 Rust 是在几年前的一次技术大会上 黄东旭说 TiKV 是用 Rust 语言编写的 引起了我的一些兴趣 但只是保持关注而已 我一直认为每一种编程语言都有着各自的典型应用领域 也有着各自的编程范式 没有最好的编程语言 参见 PH
  • 不讲武德---不用代码爬虫

    有人问 我不会代码 我能爬虫吗 我 很快啊 回答 可以 不需要写代码的 那当然是需要工具了 较为熟知的爬虫工具有八爪鱼 和web scraper 这次我所使用的是web scraper 安装web scraper 这篇文章讲述的算清晰的了
  • JetBrains插件推荐

    JetBrains软件本身就是效率神器 配合上一些好用的插件 效率就更是飞升了 本文就简单记录一些好用的插件和简介 持续更新 安装方法都很简单 这里就不过多叙述了 实在不会就百度一下 Chinese Simplified Language
  • smb windows中使用的文件共享协议(主要用于与windows互通)

    主要是samba服务 SMB协议又成为CIFS Common Internet File System 协议 samba服务功能 1文件共享 2打印共享 3加入windows2000 2003 2008域环境 4通过windows域环境进行
  • 黑马程序员并发编程笔记(二)--java线程基本操作和理解

    3 java进程的基本操作 3 1 创建进程 方法一 直接使用 Thread 构造方法的参数是给线程指定名字 推荐给线程起个名字 用setName 也可以 Thread t1 new Thread t1 Override run 方法内实现
  • 跳跃游戏(LeetCode)

    一 题目 55 跳跃游戏 难度 中等 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例1 输入 nums 2 3 1 1 4 输出 true
  • fftw3/gsl/kissfft/OouraFFT库中傅里叶变换/反傅里叶变换函数和Matlab中的fft/ifft的对应关系

    先分析一维度的 一 fftw plan dft 1d 正变换 fftw complex in fftw malloc sizeof fftw complex n fftw complex out fftw malloc sizeof fft
  • 如何用Flask和Redis来动态维护Cookies池

    为什么要用Cookies池 目标网站需要登录才能爬取 例如新浪微博 爬取过程中 如果请求频率过高 会导致封号 这就需要维护多个账号的Cookies池实现大规模爬取 Cookies池的要求 自动登录更新 定时验证筛选 提供外部接口 Cooki