首页 > 编程语言 > 详细

Python_01_IP代理池_代理池的概述和设计及项目结构

时间:2020-03-15 01:01:25      阅读:89      评论:0      收藏:0      [点我收藏+]

    什么是代理池?

  代理池就是由代理IP组成的池子,可以提供多个稳定可用的代理IP

    为什么要实现代理池?

  我们在做爬虫的时候,最常见的一种反爬虫手段就是ip反爬,也就是当同一个ip访问这个网站的次数过多,就会限制这个ip的访问。如何解决这个问题呢?就是经常换ip,使用dialingip就是其中一个比较常用的方案。免费的代理都是不稳定的,可用率非常低,收费的稳定性也不是很满意,因此需要实现代理池。

    开发环境

  开发语言:python

  开发工具:pycharm

  主要技术:

    requests:发送请求、获取页面数据

    lxml:使用xpath从页面获取我们想要的数据

    pymongo:把提取到代理ip存储到MongoDB数据库中并从中读取代理ip,给爬虫使用

    flask:用于提供web服务

    代理池的工作流程

    技术分享图片

 

 用文字描述为:

代理IP采集模块->代理IP采集->检测代理IP->如果不可用直接过滤掉,如果可用,指定默认分数->存入数据库中

代理IP监测模块->从数据库中获取所有代理IP->监测代理IP->如果代理IP不可用,就把分数-1,如果分数为0则从数据库中删除,否则更新数据库,如果代理IP可用,恢复为默认分值,更新数据库

代理API模块->从数据库中寻找高可用的代理Ip给爬虫使用

    代理池的模块及其作用

  五大核心模块

    爬虫模块:采集代理IP

      从代理IP网站上采集代理IP

      进行校验(获取代理响应速度,协议类型,匿名类型)

      把可用代理IP存储到数据库中

    代理IP的校验模块:过去指定IP的响应速度,支持的协议类型,和匿名程度。  

      原因:网上所标注的响应速度,协议类型和匿名类型是不准确的

      使用httpbin.rog进行检测

    数据库模块:实现对代理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

      用于默认代理的分数,配置日志格式,文件,启动的爬虫,检验的间隔时间等。

  代理池的项目结构:

技术分享图片

 

 也就是说按照这个结构来创建文件

 

      

 

    

 

Python_01_IP代理池_代理池的概述和设计及项目结构

原文:https://www.cnblogs.com/tkg1314/p/12495305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!