当前位置:首页 > CN2资讯 > 正文内容

用Python代理池搭建——代理获取(一)

1天前CN2资讯

代理

我们在做爬虫的过程中经常会遇到这样的情况:最初爬虫正常运行,正常抓取数据,然而一会儿的功夫可能就会出现错误,比如403 Forbidden;这时候网页上可能会出现 “您的IP访问频率太高”这样的提示,过很久之后才可能解封,但是一会后又出现这种情况。

造成这种现象的原因是该网站已采取了一些防爬虫措施。例如,服务器将在一个时间单位内检测IP请求的数量。如果超过某个阈值,服务器将直接拒绝该服务并返回一些错误信息。这种情况可以称为封IP,因此该网站成功禁止了我们的抓取工具。

想象一下,由于服务器检测到IP单位时间内的请求数量,因此我们使用某种方式来伪装IP,以使服务器无法识别由本地计算机发起的请求,因此我们可以成功地阻止IP被封。

所以这时候代理池就派上用场了。

网络上有大量免费且公开的代理可以供我们使用,但这些代理并不能保证都可以使用,因为同样的代理可能被其他人拿来爬虫使用而遭到封禁,因此,在真正使用之前,我们需要对这些免费代理进行筛选,剔除那些不能使用的。保留下可以用的,来构建一个代理池,供我们爬虫使用。

代理池设计

相关问题

构建一个代理IP池,可能有下面这些问题:

  • 代理IP从何而来?

    许多刚接触爬虫的,都试过去西刺、快代理之类有免费代理的网站去抓些免费代理,还是有一些代理能用。当然,如果你有更好的代理接口也可以自己接入。
    免费代理的采集也很简单:访问页面 —> 正则/xpath提取 —> 保存

  • 如何保证代理质量?

    可以肯定免费的代理IP大部分都是不能用的。所以采集回来的代理IP不能直接使用,检测的办法也很简单:可以写个程序不断的用代理访问一个稳定的网站,看是否可以正常访问即可。这个过程可以使用多线/进程或异步的方式,因为检测代理是个很慢的过程。

  • 采集回来的代理如何存储?

    这里选择Redis作为数据存储,因为它速度很快。以及Redis支持队列、hash、set、k-v对,支持T级别数据。

  • 如何让爬虫更方便的用到这些代理?

    答案是服务,使用Python的web框架,写个api供爬虫调用。这样代理和爬虫架构分离,同时有很多好处, 比如:当爬虫完全不用考虑如何校验代理,如何保证拿到的代理可用,这些都由代理池来完成。这样只需要安静的码爬虫代码就行啦。

  • 代理池由四部分组成:

    • 获取模块:代理获取接口,负责到各大免费代理网站爬取代理。代理形式都是IP+端口

    • 存储模块:负责存储抓取下来的代理。保存到数据库。

    • 检测模块:获取到的代理不一定都能使用,因此需要对抓到的每个代理,针对未来将要爬取的网站进行检测。测试过程中,如果可用就保存,不可用就删除。并且根据每个代理的表现,给代理进行评分,分数越高可用性越高。

    • 接口模块:使用轻量级的Flask来实现一个webAPI接口。

    mg

    采集模块

    搭建代理池,第一步是采集代理。可以在搜索引擎搜索“代理” 关键字 ,就可以到许多代理服务网站,网站上会有很多免费代理。

    img

    但是这些免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理。付费代理在很网站都有售卖,数量不用多,稳定可用即可,我们可以进行选购。

    这里我们以 66 代理为例,使用了设置了 headers 模拟请求头之后就能直接拿到数据。

    img

    这样我们就将数据给下载下来了。这里我只使用了一家做示范,到项目真实部署,则需要更多的免费代理,否则当大规模采集时,ip可能不够用。

    img

    存储模块

    数据选择保存在redis数据库中,这里不选择MySQL或者其他数据库的原因很多。第一Redis数据库非常快而且安全。并且操作足够简单。python 操作 redis 数据库需要安装一下 redis 模块。使用 pip install redis 安装即可。

    使用 redis 模块操作 redis 数据库不够简单。所以对数据库操作部分进行了封装。这样只要导入就可以使用了。封装的方法主要是支持基本的链接数据库、添加数据、获取代理。

    redis有序集合

    使用redis有序集合存储代理:

  • 有序集合,有键值对构成的数据集合,键又叫成员member,值又叫分值score。

  • 分值必须是浮点数/整数型,并且按照分值的由低到高排序。

  • 键【member】必须唯一,分值可重复

  • 例子:键【member】:220.12.23.62 :6666      值【score】:98

    定义RedisClient()类

  • 一旦实例化该类,自动初始化【连接数据库】,并作为该实例的一个属性

  • 类实现以下方法:

    • 初始化方法链接数据库- decrease() 判断分值,减一或者删除代理

    • random() 在分值最大范围内取随机代理

    • exist()、count()、delete() 等其他方法

    img

    保存免费代理

    最终导入定义好的 RedisClient 对象,将获取的代理保存到数据库、备用。

    imgimg

    本案例中用到的 redis 数据库可以自行到网上下载,用到的 redis 数据库管理工具也是开源的。后面再讲如何筛选代理以及提供API服务,最终搭建出代理池。


      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/32080.html

      分享给朋友:

      “用Python代理池搭建——代理获取(一)” 的相关文章

      甲骨文与云技术的创新研究探索

      甲骨文的概述 我一直对甲骨文充满兴趣,它不仅是中国古代文字的起源之一,也在历史发展中扮演了重要角色。甲骨文的起源可以追溯到公元前14世纪的商朝晚期,当时的一些卜辞记录在龟甲和兽骨上,这成为了我们了解古代社会、文化和宗教信仰的重要窗口。通过这些文字,我感受到那种历史的厚重感,仿佛能够穿越时间与古人对话...

      AS4134是什么线路:深入解析中国电信的核心骨干网

      AS4134线路,大家也可以叫它163网络,这是中国电信的核心骨干网之一。聊到AS4134,首先让人想到的就是它在国内出海带宽上占据的重要地位。能够承载90%的电信业务负载,真的是一个不可小觑的网络。这条线路不仅是中国电信的主要骨干网,还成为了很多海外用户访问国内互联网资源的高性价比选择。我在租用香...

      探索诸暨市:地理特征、气候与经济发展全面分析

      我发现诸暨市,这个位于浙江省中北部的县级市,真是一个令人着迷的地方。它东靠嵊州市,南面与东阳、义乌和浦江相邻,西面与桐庐和富阳相接,北边则与柯桥和萧山为界。这样的地理位置赋予了诸暨市独特的区域特色,方便了与周边城市的交流与发展。 在谈到诸暨的地理特征时,不得不提其独特的地形地貌。诸暨市位于浙东南和浙...

      选择野草云主机服务,享受高性价比与优质体验

      野草云是一家在2016年成立的主机服务提供商,由国人运营,专注于为中国大陆地区的用户提供优质的服务和产品。作为一家相对年轻的主机商,野草云力求用更贴近用户的方式来满足客户需求,特别是在国内市场需求快速增长的背景下,它的出现让很多用户找到了合适的主机选择。 说到野草云的历史背景,首先让我想起它在竞争激...

      怎么看VPS的路由好不好:评估与优化路由性能的方法

      如何评估VPS路由性能 VPS的路由性能对网站的加载速度和用户体验至关重要。评估VPS的路由性能,我通常会关注几个关键指标,包括延迟、丢包率和带宽。了解这些内容能够帮助我判断服务器能否在高流量时段保持稳定运行。 在这过程中,我特别重视使用一些专业的测试工具。这些工具可以帮助我全面了解VPS的网络性能...

      如何在宝塔面板上安装和配置Node.js的详细指南

      宝塔面板是一个非常便捷的服务器管理工具,专为简化网站管理而设计。无论是网站的搭建,还是后期的维护,宝塔面板都能够提供一系列友好的功能和工具,使得用户即使没有专业的技术背景,也能轻松上手。它允许用户通过Web界面对服务器进行管理,安装软件和配置环境,简直就是一个“傻瓜式”的的操作平台。 谈到宝塔面板,...