摘要

本文作者:崔庆才

GitHub地址:https://github.com/Python3WebSpider/CookiesPool

小编推荐一本崔大大写的网络爬虫的书籍《Python3网络爬虫开发实战》

推荐下我自己创建的Python学习交流群960410445,这是Python学习交流的地方,不管你是小白还是大牛,小编都欢迎,不定期分享干货,包括我整理的一份适合零基础学习Python的资料和入门教程。

很多时候,在爬取没有登录的情况下,我们也可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做SEO,不会对所有页面都设置登录限制。

但是,不登录直接爬取会有一些弊端,弊端主要有以下两点。

设置了登录限制的页面无法爬取。比如论坛,博客等等

如果没有登录请求频繁就很容易被限制或者IP直接被封

下面我们就第二种情况做一个简单的实验。以微博为例,我们先找到一个Ajax接口,例如新浪财经官方微博的信息接口

如果用浏览器直接访问,返回的数据是JSON格式,如下图所示:

但是如果频繁访问的话:

登录微博账号之后重新打开此链接,则页面正常显示接口的结果,而未登录的页面仍然显示请求过于频繁,如下图所示:

我们以新浪微博为例来实现一个Cookies池的搭建过程。

准备工作

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

Cookies池架构

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

Cookies池架构的基本模块分为4块:存储模块、生成模块、检测模块、接口模块。

Cookies池的实现

存储模块

需要存储的内容无非就是账号信息和Cookies信息。

建立两个Hash,结构分别如下图所示。

Hash的Key就是账号,Value对应着密码或者Cookies。

接下来我们创建一个存储模块类,用以提供一些Hash的基本操作,代码如下:

生成模块

生成模块负责获取各个账号信息并模拟登录,随后生成Cookies并保存。

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

因为我们对接的是新浪微博,前面我们已经破解了新浪微博的四宫格验证码,在这里我们直接对接过来即可,不过现在需要加一个获取Cookies的方法,并针对不同的情况返回不同的结果,逻辑如下所示:

这里返回结果的类型是字典,并且附有状态码status,在生成模块里我们可以根据不同的状态码做不同的处理。例如

状态码为1的情况:表示成功获取Cookies,我们只需要将Cookies保存到数据库即可。

状态码为2的情况:代表用户名或密码错误,那么我们就应该把当前数据库中存储的账号信息删除。

状态码为3的情况:代表登录失败的一些错误,此时不能判断是否用户名或密码错误,也不能成功获取Cookies,那么简单提示再进行下一个处理即可。

代码实现如下所示:

检测模块

检测模块需要做的就是检测Cookies失效,然后将其从数据中移除。

我们还需要增加一个定时检测模块,它负责遍历池中的所有Cookies,同时设置好对应的检测链接,我们用一个个Cookies去请求这个链接。

为了实现通用可扩展性,我们首先定义一个检测器的父类,声明一些通用组件,实现如下所示:

如检测微博的就可以定义为WeiboValidTester,实现其独有的test()方法来检测微博的Cookies是否合法,然后做相应的处理,所以在这里我们还需要再加一个子类来继承这个ValidTester,重写其test()方法,实现如下:

接口模块

调度模块

运行效果

三个进程全部开启:

转载于:https://juejin.im/post/5c398cdf6fb9a049ff4e59bc

爬取网站总是被封?大神教你搭建Cookies池,以后远离IP被封相关推荐

  1. python爬取美女_知乎大神用Python爬取高颜值美女(Python爬虫+人脸检测+颜值检测)...

    import time import os import re import requests from lxml import etree from aip import AipFace #百度云 ...

  2. 如何使用robots禁止各大搜索引擎爬虫爬取网站

    如何使用robots禁止各大搜索引擎爬虫爬取网站 一.总结 一句话总结:假如此网站禁止爬虫抓取,那么,只要在网站的根目录下,创建一个robots.txt文件 User-agent: * Disallo ...

  3. java爬虫爬取互联网上的各大影视网站---360影视(附源码下载)

    关于爬虫: 万维网上有着无数的网页,包含着海量的信息,无孔不入.森罗万象.但很多时候,无论出于数据分析或产品需求,我们需要从某些网站,提取出我们感兴趣.有价值的内容,但是纵然是进化到21世纪的人类,依 ...

  4. python如何爬取网站所有目录_用python爬虫爬取网站的章节目录及其网址

    认识爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  5. python 第一行 报错_初学Python-只需4步,爬取网站图片

    很多人学习Python很重要的一个原因是,可以很简单的把一个网站的数据爬下来. 尤其是做我们这一行,产品经理,电商行业. 领导:弄一个买卖游戏周边商品的交易APP出来.我:行,那我们卖什么呀?领导:看 ...

  6. python爬取网站时,一键获取headers、url等信息(真的是让我爬取网站时,省了不少力气,作为小秘密分享给大家喽)

    python爬取网站时,一键获取headers.url等信息 (真的是让我爬取网站时,省了不少力气,作为小秘密分享给大家喽) 作为Python的使用者,我今天就和大家来分享分享我学习python的经验 ...

  7. python爬取网站的图片

    python爬取网站的图片 本次爬取图片所需要用到的库:Requests库,BeautifulSoup库,正则表达式,os库. 思路:先爬一张图片,再爬一个网站的图片 先爬一张图片: 首先要得到这张图 ...

  8. 今天教你用 Python 爬取网站的指南

    通过基本的 Python 工具获得爬取完整 HTML 网站的实践经验. (本文字数:11235,阅读时长大约:14 分钟) 有很多很棒的书可以帮助你学习 Python ,但是谁真正读了这那些大部头呢? ...

  9. python如何爬取网页视频_快就完事了!10分钟用python爬取网站视频和图片

    原标题:快就完事了!10分钟用python爬取网站视频和图片 话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片. 638855753 网站分析: 我们点视频按钮,可以看到的链接是: ...

最新文章

  1. 福利 | “石墨烯之父”现场演讲!中国科幻大会“科技与未来”论坛报名中
  2. 原来 Excel 只需三步就可以给证件照换底色!
  3. 13.挂载点、文件系统、磁盘的命名、分区的命名
  4. iOS7以下设备获取mac地址
  5. 从对象角度阐释五行变化
  6. C++ 重载函数调用运算符 | 再探lambda,函数对象,可调用对象
  7. 工作与生活平衡(2)运动也需要执行力
  8. 复数类--重载运算符3+
  9. python网络编程学习笔记(4):域名系统
  10. 218.94.78.76:20001/index.php,详解spring中使用Elasticsearch的实例教程
  11. 自助bi工具如何搭建数据可视化
  12. ACL 2021 | 丁香园知识增强预训练模型
  13. matlab调用python数值精度改变吗_Matlab如何调用python脚本-matlab调用python数值精度改变吗 - PS下...
  14. 欧陆词典导入词典库(自定义英文词典)
  15. PHPCMS 前台模板集合
  16. Python 语言如何对身份证真实性进行实名认证(阿里云身份证实名认证接口API)
  17. 蒟蒻の算法题(~~完全不会~~的期望)01
  18. 实用机器学习-学习笔记
  19. linkedin数据获取策略
  20. 用函数计算两数之和和两数之积

热门文章

  1. 话题通信下ROS项目的结构配置
  2. codeforces A. Johnny and Ancient Computer
  3. android 控制 导航栏、状态栏
  4. 整流二极管整流电流知识归纳
  5. python operator 多属性排序_Python之路200个小例子网页版,真诚奉献,从一而终!...
  6. 无监督特征对齐的迁移学习理论框架
  7. 嵌入式学习日记(一)
  8. 怎样删除我的电脑里的wps云文档图标
  9. 牛年的春节,【抢票神器】最没用的一年
  10. Snagit捕获快捷键