爬虫入门到精通_实战篇10(使用Redis+Flask维护动态代理池)

1 目标

为什么要用代理池

  • 许多网站有专门的反爬虫措施,可能遇到封IP等问题。
  • 互联网上公开了大量免费代理,利用好资源。
  • 通过定时的检测维护同样可以得到多个可用代理。

代理池的要求

  • 多站抓取,异步检测
  • 定时筛选,持续更新
  • 提供接口,易于提取

2 流程框架

代理池架构:
在这里插入图片描述

3 实战

代码下载

github一位大神的源码作为参考:https://github.com/germey/proxypool
在这里插入图片描述
flask运行需要安装:
virtualenv是一个虚拟的Python环境构建器。它帮助用户并行创建多个Python环境。因此,它可以避免不同版本的库之间的兼容性问题。

# 以下命令用于安装virtualenv:
pip install virtualenv# 安装后,将在文件夹中创建新的虚拟环境。
mkdir newproj
cd newproj
virtualenv venv# 要在 Windows 上激活相应的环境,可以使用以下命令:
venv\scripts\activate# 现在准备在这个环境中安装Flask:
pip install Flask

目录结构及介绍

在这里插入图片描述
examples目录是示例
proxypool:程序的源代码
run:程序入口
setup:安装代理池,代理池安装到python包

run.py:

在这里插入图片描述运行一个调度器schedule,运行一个接口api

schedule.py

在这里插入图片描述
Schedule.valid_proxy:网上获取代理,筛选代理,存到数据库
Schedule.check_pool:定时检查清理代理
在这里插入图片描述
set_raw_proxies:存放可用代理数组
在这里插入图片描述
async:异步检测
test_single_proxy:测试单个代理
在这里插入图片描述
test:测试代理是否可用
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
FreeProxyGetter():各大网站抓取代理的类
is_over_threshold:代理池满没满
callback:动态拿到crawl_方法的名称

db.py

redis队列的一些操作:
连接数据库:
在这里插入图片描述
从数据库获取代理:
在这里插入图片描述
上图是:从左侧批量(count)获取多少个代理。

插入代理:
在这里插入图片描述
上图是:将新代理放入右侧,所以右侧代理比左侧代理新。

api获取最新可用代理:
在这里插入图片描述
获取代理数量及更新:
在这里插入图片描述

getter.py

在这里插入图片描述
添加属性,将方法名汇总起来。
crawl_的方法放入列表
在这里插入图片描述

api.py

在这里插入图片描述

总结

动态获取方式和使用挺好玩的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/511567.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB) 论坛为局域网论坛,仅供内部同事交流使用! 使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M)…

嵌入式中volatile关键字的使用方法

Hi,大家好! 今天我们来学习一下volatile关键字,volatile关键字想必大家在平时编程中都见过或用过。可是小伙伴们有没有想过什么时候需要使用volatile关键字吗? 在C语言中,volatile是一个关键字,用于告诉编译器不要优化…

重构笔记系统:Docker Compose在微服务架构中的应用与优化

虽然我的笔记系统的开发是基于微服务的思想,但是在服务的配置和编排上感觉还是不太合理,具体来说,在开发上的配置和在生产上的配置差别太大。现在规模小,后面规模变大,估计这一块会成为系统生长的瓶颈。 因此&#xff…

Electron-builder打包安装包——编译篇

突然有一天想打包个桌面程序,没有打包过,经过九牛二虎之力终于打包出来,在此感谢那些热于分享的前辈! 本篇只讲打包运行和出现的问题 一、准备工作:提前下载相关资源包,否则在国内环境下可能因为网络问题…

C语言qsort函数介绍

前言 学到了函数指针,那这篇博客我们可以根据函数指针,了解一个函数qsort的应用与模拟实现 欢迎关注个人主页:小张同学zkf 若有疑问 评论区见 目录 1.回调函数 2.qsort函数使用 3.qsort模拟实现 1.回调函数 讲这个东西之前我们来认识一下…

开发者分享:利用 EMQX Cloud 与 ESP32 微控制器实现智能液冷散热系统

作者:陶德坤,EMQX Cloud 开发者。 作为一名后端开发人员,我经常需要同时运行多个 Jetbrains IDE (集成开发环境),所以经常面临笔记本电脑过热问题。我曾尝试过各种散热方法,从传统的风扇到更先…

《数字图像处理(MATLAB版)》相关算法代码及其分析(3)

目录 1 对边界进行子采样 1.1 输入参数检查 1.2 处理重复坐标 1.3 计算边界最大范围 1.4 确定网格线数量 1.5 构建网格位置向量 1.6 计算曼哈顿距离 1.7 整理输出结果 1.8 返回结果 2 改变图像的存储类别 2.1 函数输入 2.2 数据类型转换 2.3 错误处理 2.4 返回结…

Chrome禁止自动升级

一、关闭计划任务 1、首先我们需要右键点击我的电脑,在打开的选项里选择管理。   2、在打开的对话框中选择任务计划程序。   3、在任务计划程序库中找到两个和chrome自动更新相关的任务计划GoogleUpdateTaskMachineCore与GoogleUpdateTaskMachineUA。     4…

【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱

1 基本定义 滑动平均滤波算法是一种经典的滤波方法,它通过计算信号的移动平均值来消除噪声。该算法的主要思想是对信号进行滑动窗口处理,窗口内的数据进行平均化,以得到平滑后的信号。这样可以有效地去除周期性噪声和高频噪声,同…

【MySQL使用】show processlist 命令详解

show processlist 命令详解 一、命令含义二、命令返回参数三、Command值解释四、State值解释五、参考资料 一、命令含义 对于一个MySQL连接,或者说一个线程,任何时刻都有一个状态,该状态表示了MySQL当前正在做什么。SHOW PROCESSLIST 命令的…

高级大数据技术 实验一 scala编程

​ 高级大数据技术 实验一 scala编程 写的不是很好,大家多见谅! 1. 计算水仙花数 实验目标; (1) 掌握scala的数组,列表,映射的定义与使用 (2) 掌握scala的基本编程 实验说明 …

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题 一、Bean的作用域1.singleton2.prototype3.其他scope值 二、Bean的实例化方式1.通过构造方法实例化2.通过简单工厂模式实例化3.通过factory-bean实例化4.通过FactoryBean接口实例化5.BeanFactory和FactoryBean的区别…