爬虫入门第2课:代理池的设计
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫入门第2课:代理池的设计相关的知识,希望对你有一定的参考价值。
爬虫学习知识点及案例篇(汇总):
本阶段带大家从代理池的设计开始,学习Python爬虫及项目实战,详情关注上方专栏 ↑↑↑
1. 代理池的工作流程
目标
: 理解代理池的工作流程 以及 各个模块的作用内容介绍
- 代理池的工作流程
- 代理池的模块及其作用
- 代理池的项目结构
- 代理池工作流程图:
2. 代理池的模块及其作用
-
代理池分五大核心模块:
-
爬虫模块: 采集代理IP
- 从代理IP网站上采集代理IP
- 进行校验(获取代理响应速度, 协议类型, 匿名类型),
- 把可用代理IP存储到数据库中
-
代理IP的校验模块: 获取指定代理的响应速度, 支持的协议以及匿名程度
- 原因: 网站上所标注的响应速度,协议类型和匿名类型是不准确的
- 这里使用httpbin.org进行检测
-
数据库模块: 实现对代理IP的增删改查操作
- 这里使用MongoDB来存储代理IP
-
检测模块: 定时的对代理池中代理进行检测, 保证代理池中代理的可用性.
- 从数据库读取所有的代理IP
- 对代理IP进行逐一检测, 可用开启多个协程, 以提高检测速度
- 如果该代理不可用, 就让这个代理分数-1, 当代理的分数到0了, 就删除该代理; 如果检测到代理可用就恢复为满分.
-
代理IP服务接口: 提供高可用的代理IP给爬虫使用
- 根据协议类型和域名获取随机的高质量代理IP
- 根据协议类型和域名获取多个高质量代理IP
- 根据代理IP,不可用域名, 告诉代理池这个代理IP在该域名下不可用, 下次获取这个域名的代理IP时候, 就不会再获取这个代理IP了, 从而保证代理IP高可用性.
-
-
代理池的其他模块
- 数据模型:
domain.py
:- 代理IP的数据模型, 用于封装代理IP相关信息, 比如ip,端口号, 响应速度, 协议类型, 匿名类型,分数等.
-
程序启动入口:
main.py
- 代理池提供一个统一的启动入口
-
工具模块:
- 日志模块: 用于记录日志信息
- http模块: 用于获取随机User-Agent的请求头
- 配置文件:
settings.py
- 用于默认代理的分数, 配置日志格式, 文件, 启动的爬虫, 检验的间隔时间 等.
- 数据模型:
3. 代理池的项目结构
-- IPProxyPool
-- core
-- db
-- __init__.py
-- mongo_pool.py
-- proxy_validate
-- __init__.py
-- httpbin_validator.py
-- proxy_spiders
-- __init__.py
-- base_spider.py
-- proxy_spiders.py
-- run_spiders.py
-- proxy_test.py
-- proxy_api.py
-- domain.py
-- utils
-- __init__.py
-- http.py
-- log.py
-- main.py
-- settings.py
小结
-
工作流程:
- 代理IP采集模块: 抓取代理IP -> 校验代理IP可用性 -> 如果可用 -> 数据库(代理池)
- 检验模块: 读取数据库的代理IP -> 校验代理IP可用性 -> 更新 或 删除代理IP
- 代理API模块: 从数据库中获取高可用代理IP, 给爬虫使用.
-
模块及其作用:
- 五大核心模块
- 代理IP采集模块: 采集代理IP
- 校验模块: 检测代理的可用性: 响应速度, 协议类型, 匿名程度
- 数据库模块: 对代理IP进行增删改查的操作
- 检测模块: 获取数据库中代理IP, 进行处理, 保证代理IP的可用性
- API模块: 提供爬虫或高可用代理IP 和 指定代理不可用域名的接口.
- 其他模块
- 数据模型: 用于封装代理IP信息
- main.py: 启动的统一入口
- utils: 工具模块
- http.py : 提供随机的User-Agent
- log.py : 日志模块, 用于记录日志
- settings.py: 配置文件, 用于对项目进行配置
- 五大核心模块
以上是关于爬虫入门第2课:代理池的设计的主要内容,如果未能解决你的问题,请参考以下文章