解锁网络无限可能:揭秘微软工程师力作——付费代理IP池深度改造与实战部署指南

ip · 浏览次数 : 10

小编点评

**基于付费代理的代理IP池项目简介** 本文介绍了一个基于付费代理的代理IP池项目,该项目来源于微软某工程师的构建,并对其进行了改造以适应爬虫项目。项目主要分为四大模块:代理生成、代理检测、代理存储和接口模块。代理生成模块通过购买付费代理接口获取代理IP,并利用Redis数据库进行存储。检测模块负责检测代理IP的有效性,验证通过后将序值提高。代理存储模块封装了Redis数据库的操作,供其他模块调用。接口模块通过Flask框架展示代理规则,支持随机展示有效代理IP或根据规则展示代理IP。 1. **代理生成模块**: * 使用付费代理接口获取代理IP。 * 将获取的代理IP存储在Redis数据库中。 * 初始化时,序值为10。 2. **代理检测模块**: * 利用Redis数据库的有序集合进行代理IP的检测。 * 检测成功后,序值提高至100;检测失败后,序值减少。 * 当序值减至0时,丢弃此代理IP。 * 采用协程机制提高检测速度。 3. **代理存储模块**: * 封装了Redis数据库的操作,供其他模块调用。 * 代理IP的添加、删除和查询均在此模块中进行。 4. **接口模块**: * 通过Flask框架展示代理规则。 * 支持随机展示有效代理IP或根据规则展示代理IP。 * 提供了获取代理IP数量、全部代理IP和单个代理IP详情的功能。 项目运行前需安装Redis数据库和Redis可视化工具,并创建一个Python虚拟环境。项目源码及配置项可通过以下链接获取:[项目源码](https://blog.csdn.net/m0_74087660/article/details/140447563?csdn_share_tail=%E5%85%B3%E5%BA%94%E6%96%87%E6%9C%AC%E4%BB%A3%E7%A0%81)。如有疑问,可私信联系。 > 注意:本项目仅提供基本功能展示,实际应用中可能需要进行更多优化和安全措施。

正文

基于付费代理的代理IP池

项目来源

此项目为微软某个工程师构建的代理IP池,我对此进行了改造。可以用于生产环境中的爬虫项目

阅读前建议

阅读我之前发布的爬虫基础的文章,了解代理如何获取、使用等。

分为四大模块

  1. 代理生成
    • 基于购买的付费代理接口获取代理IP,利用redis数据库的有序集合进行存储。初始序为10。
    • 检测模块检测时,若检测成功,将序变为100,若检测失败,将序减一,直至减为0则抛弃此代理
  2. 代理检测利用redis数据库的zsan方法每次从数据库中取出20条数据和游标,每20条20条地进行检测。
    • 首先检测代理IP的格式(检测是否含有冒号,若有则根据冒号进行分割获取IP和Port,分别检测IP(根据 '.' 进行分割,判断是否包含4部分且每部分是证书且在0到255之间则为有效)和Port(判断是否是整数)
    • 之后检测代理IP是否可用,找一个检测IP网站。不加代理访问并记作IP1,加代理访问记作IP2,判断IP1和IP2是否不相等,再判断加的代理IP和IP2是否相等,来决定此代理是否有效
    • 再用此代理IP去访问通用的网站(百度)或者你要爬取的网站,如果状态码在200到302之间,那么认为代理IP检测通过,将序改为100,若检测失败,则将序减一
    • 检测模块采取了协程机制,增加检测速度
  3. 代理存储
    • 封装了redis数据库的一些操作供其他三个模块调用
  4. 接口模块
    • 将代理IP从redis数据库中读出,通过Flask开接口的方式展示到前台。
    • 展示代理规则:优先随机展示序为100的,没有100的再随机展示序为10到100的

本地部署

前提:电脑已经装好了redis和redis可视化工具(如果不会装,可以私信我)

  1. conda 建立一个虚拟环境

    conda create -n new_env python=3.x  # 替换 x 为你需要的 Python 版本 
    
  2. 激活新建环境

    conda activate new_env
    
  3. 安装依赖项

    pip install -r requirments.txt
    
  4. 更改项目 settings.py 配置项

    # redis host
    REDIS_HOST = env.str('REDIS_HOST', '127.0.0.1')
    # redis port
    REDIS_PORT = env.int('REDIS_PORT', 6379)
    # redis password, if no password, set it to None
    REDIS_PASSWORD = env.str('REDIS_PASSWORD', None)
    # redis db, if no choice, set it to 0
    REDIS_DB = env.int('REDIS_DB', 0)
    # redis connection string, like redis://[password]@host:port or rediss://[password]@host:port/0
    
    # redis hash table key name
    REDIS_KEY = env.str('REDIS_KEY', 'proxies:universal')  # 前面是标识符,后面是redis数据库的表名
    
    # definition of proxy scores
    PROXY_SCORE_MAX = 100  # 如果检测成功,序设置为100
    PROXY_SCORE_MIN = 0  # 接口模块取代理时会优先取序为100的,没有的话再取PROXY_SCORE_MIN和PROXY_SCORE_MAX之间的代理,这里可以自行设置
    PROXY_SCORE_INIT = 10  # 代理IP初始序
    
    # definition of proxy number
    # PROXY_NUMBER_MAX = 50000
    PROXY_NUMBER_MAX = 5  # 代理IP池容量
    PROXY_NUMBER_MIN = 0
    
    # definition of tester
    # 检测代理IP是否有效的测试网址,但是需要改成http:避免ssl验证
    TEST_URL = env.str('TEST_URL', 'http://www.baidu.com')
    # TEST_URL = env.str('TEST_URL', 'https://antispider7.scrape.center/login')
    TEST_TIMEOUT = env.int('TEST_TIMEOUT', 10)
    TEST_BATCH = env.int('TEST_BATCH', 20)
    
    # 检测成功的状态码
    TEST_VALID_STATUS = env.list('TEST_VALID_STATUS', [200, 206, 302])
    
    # definition of api
    # 端口模块相关配置
    API_HOST = env.str('API_HOST', '127.0.0.1')
    API_PORT = env.int('API_PORT', 5555)
    API_THREADED = env.bool('API_THREADED', True)
    
    # flags of enable
    # 是否开启对应模块
    ENABLE_TESTER = env.bool('ENABLE_TESTER', True)
    ENABLE_GETTER = env.bool('ENABLE_GETTER', True)
    ENABLE_SERVER = env.bool('ENABLE_SERVER', True)
    
    
    
  5. 修改代理IP提取链接urls(proxypool/crawlers/base.py)

    @logger.catch
    def crawl(self):
        """
            crawl main method
            """
        # for url in self.urls:
        #     logger.info(f'fetching {url}')
        #     html = self.fetch(url)
        #     time.sleep(.5)
        #     for proxy in self.parse(html):#在父类里调用自身方法,此处的proxy是一页链接的代理IP列表
        #         logger.info(f'fetched proxy {proxy.string()} from {url}')
        #         yield proxy#此处的proxy是返回的是所有页的代理IP列表
        # 小象代理提取代理IP的链接
        urls = "https://api.xiaoxiangdaili.com/ip/get?appKey=1130083050647343104&appSecret=5ch2dc4Q&cnt=5&wt=json&method=https&city=&province="
        logger.info(f'fetching {urls}')
        html = self.fetch(urls)
        time.sleep(.5)
        for proxy in self.parse(html):  # 在父类里调用自身方法,此处的proxy是一页链接的代理IP列表
            logger.info(f'fetched proxy {proxy.string()} from {urls}')
            yield proxy  # 此处的proxy是返回的是所有页的代理IP列表
    
  6. 运行redis服务

  7. 运行run.py文件

  8. 通过访问http://127.0.0.1:5555即可访问代理IP池的前台

    • /all:全部代理IP
    • /random:根据规则(上面模块讲解过)展示随机一个代理IP
    • /count:代理IP数量

项目源码

https://blog.csdn.net/m0_74087660/article/details/140447563?csdn_share_tail={"type"%3A"blog"%2C"rType"%3A"article"%2C"rId"%3A"140447563"%2C"source"%3A"m0_74087660"}

有意私信我也可以(微信公众号)

更多精致内容

与解锁网络无限可能:揭秘微软工程师力作——付费代理IP池深度改造与实战部署指南相似的内容:

解锁网络无限可能:揭秘微软工程师力作——付费代理IP池深度改造与实战部署指南

"揭秘微软工程师力作:付费代理IP池深度改造,四大模块精讲,含实战部署指南。掌握高效、稳定代理IP资源,解锁网络无限可能。从筛选管理到安全加密,详细步骤助您快速搭建专属代理网络。尊享付费阅读,获取深度技术洞察与实践指导。"

TCP协议的秘密武器:流量控制与拥塞控制

本文将深入探讨TCP协议的关键机制,包括流量控制和拥塞控制,以解密其在网络数据传输中的作用。通过了解TCP协议的工作原理,我们可以更好地理解网络通信的稳定性和可靠性,为我们的网络体验提供更安全、高效的保障。无论您是网络爱好者、技术从业者还是普通用户,本文将为您揭开TCP协议的神秘面纱,带您进入网络传输的奇妙世界。

Windows 映射网络驱动器及删除-此网格连接不存在

将共享目录,映射到本地磁盘,可以方便快速访问 添加 点击【此电脑】菜单栏中,选择【计算机】->【映射网格驱动器】-> 文件夹中输入 共享目录地址,如下图 删除 右击,网格映射盘,右击【断开连接】 异常 映射的IP发生变化后,将无法断开连接,此时报“此网格连接不存在”错误 解决异常 命令gpedit.

[转帖]vs调试运行程序出现:“由于找不到MSVCP140D.dll,无法继续执行代码 ”的解决方法

碎碎念 最近在使用Visual studio调试程序的时候,突然冒出了“由于找不到MSVCP140D.dll,无法继续执行代码。重新安装程序可能会解决次问题。”的错误。如下图所示。在网上尝试了很多别人的解决方案,都没有效果。 最后在不懈努力下终于可以正常运行了。 以下我尝试过的无效方案: 很多人说是

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

​《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大的成功,是因为它提出了一个新概念,把标准框架划分为

SpringCloud解决feign调用token丢失问题

背景讨论 feign请求 在微服务环境中,完成一个http请求,经常需要调用其他好几个服务才可以完成其功能,这种情况非常普遍,无法避免。那么就需要服务之间的通过feignClient发起请求,获取需要的 资源。 认证和鉴权 一般而言,微服务项目部署环境中,各个微服务都是运行在内网环境,网关服务负责请

[转帖]解释docker单机部署kraft模式kafka集群时,尝试各种方式的网络broker全部不通而启动失败的原因,并提示常见bug关注点

现象: controller节点与其他两个broker的通信失败。公网ip,宿主机ip,服务名,各种网络方式,都无法成功。 两点提示: 1.bug原因:因为单机内存不够用,设置了较低的 KAFKA_HEAP_OPTS 参数值128M,导致broker通信失败! 2.kafka容器启动中,增加 BIT

京东云开发者|提高IT运维效率,深度解读京东云AIOps落地实践

基于深度学习对运维时序指标进行异常检测,快速发现线上业务问题 时间序列的异常检测是实际应用中的一个关键问题,尤其是在 IT 行业。我们没有采用传统的基于阈值的方法来实现异常检测,而是通过深度学习提出了一种无阈值方法:基于 LSTM 网络的基线(一个 LSTM 框架辅助几个优化步骤)和无监督检测(神经

【程序员的福音】一款C#开源的GitHub加速神器

前言 作为一个程序员你是否会经常会遇到GitHub无法访问(如下无法访问图片),或者是访问和下载源码时十分缓慢就像乌龟爬行一般。之前有尝试过手动修改host文件来解决网站的访问问题,以及更换网络但还是有时候无法正常的访问GitHub,今天给大家推荐的这款由C#开源的GitHub加速神器成功的帮我们解

Sermant类隔离架构:解决JavaAgent场景类冲突的实践

Sermant是基于Java字节码增强技术的无代理服务网格,其利用Java字节码增强技术为宿主应用程序提供服务治理功能。