爬虫入门第2课:代理池的设计

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫入门第2课:代理池的设计相关的知识,希望对你有一定的参考价值。

爬虫学习知识点及案例篇(汇总):

爬虫入门第1课:代理池概述及开发环境

本阶段带大家从代理池的设计开始,学习Python爬虫及项目实战,详情关注上方专栏 ↑↑↑


1. 代理池的工作流程

  • 目标: 理解代理池的工作流程 以及 各个模块的作用
  • 内容介绍
    1. 代理池的工作流程
    2. 代理池的模块及其作用
    3. 代理池的项目结构
  • 代理池工作流程图:

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课:代理池的设计的主要内容,如果未能解决你的问题,请参考以下文章

爬虫入门第6课:实现代理池的校验模块

爬虫入门第8课:实现代理池的爬虫模块

爬虫入门第9课:实现代理池的检测模块

爬虫入门第10课:实现代理池的API模块

爬虫入门第11课:实现代理池的启动入口

爬虫入门第3课:实现代理池思路