如何构建一个自己的代理ip池

您所在的位置:网站首页 拨号服务器搭建ip池 如何构建一个自己的代理ip池

如何构建一个自己的代理ip池

2023-08-08 18:46| 来源: 网络整理| 查看: 265

一、默认自动切换IP

登录线程IP池客户端时,默认情况下会自动切换IP。 如果不想自动切换IP,或者还没有准备开始使用,请在客户端右侧将“在IP过期前几秒自动申请切换”设置为“0”。 0无效。

二.默认情况下不需要授权

默认情况下,线程IP池可以使用代理IP,而无需验证。 如果需要在特定情况下允许使用,请选中“访问代理需要验证”。 用户名和密码是用于登录线程IP池客户端的“TID”和“密码”,帐户验证允许使用。

三.退出软件前取消代理

许多用户退出线程IP池客户端后,发现浏览器无法访问网站。 这是因为,以前在软件中一键设置浏览器代理IP,软件结束后,无法继续传输,因此无法访问网站。

在退出线程IP池软件之前,最好取消代理。 如果忘记,请选择浏览器右上角的“工具”——“互联网选项”——“连接”——“局域网设置”(虽然因浏览器而异,但方法大致相同)、“为局域网使用代理服务器”

1、爬取免费代理IP,搭建动态IP池

市面上有不少免费的代理IP服务,使用免费代理搭建动态IP池的方法非常常见,也是比较多人使用的一种。因为它是免费的,也就意味着无需成本,所以大多数人都因为“免费”二字而趋之若鹜。但是这种方法操作相对复杂一些,网上也有不少的教程分享,如果您感兴趣的话可以上网查找相关的项目,这边就不详细叙述如何爬取搭建了。

2、购买拨号服务器,搭建动态IP池

购买拨号服务器来搭建动态IP池也是很多朋友的选择。购买一定数量的服务器,然后花费一些时间来编写代码,或者结合网上的现成的软件,就可以将代理动态IP的池搭建起来了。这种方法搭建出来的IP池资源都是一个人独享的,工作起来效果还是不错的。只不过长期下来的话,服务器的维护成本较高,并且需要定时的维护,消耗大量的时间,如果是个人的话,搭建起来后期维护的成本太高了,如果您不是高端玩家的话,不建议使用这种方式搭建IP池。

3、购买代理IP,搭建动态IP池

选择购买代理IP服务的朋友很多,因为代理IP服务省时省力并且效果比较好。相对于免费的代理IP来说,收费代理IP虽然需要付出一定的成本,但是IP资源都是真实IP,并且高匿性,稳定性也好。

相比前两种搭建IP池的方法来说,付费代理IP更能满足用户的需求,但对于有些特殊要求的朋友来说,他们想一次提取很多个或者多次提取很多个,存放在本地建立的IP池里,这种方法在一定的程度上优化了方案。其中,像Lum Proxy这样的动态IP代理服务就深受大家的欢迎。Lum Proxy是国内领先的动态IP服务商,有着全球每一个国家和城市的9000多万IP。在每个国家每个大城市基本都涵盖,而且会不定时更换一些IP段。100%匿名高速代理,能够有效地帮助大家更好地工作。

代理IP池管理代理的集合及其相关IP地址。IP池中的代理类型决定了代理IP池的类型。一般情况下,根据代理ip池包含的代理类型,代理ip池有5种类型。 1、免费代理IP池。该免费代理IP池也称为公共IP池,它是管理免费代理的列表。IP一般是数据中心IP,但是在一些公共IP池中,你可以使用混合的住宅IP。可靠度,公共IP是最不可靠的代理池。 由于很容易检测到公共代理服务器(也称为免费代理服务器),一些网站会默认阻止它,并在你不知情的情况下泄露你的真实IP地址。它们通常不需要任何形式的认证,直到被使用。 在Internet上,如果使用免费代理列表站点,则很容易建立公共IP池。为了创建一个公共IP池,您需要在Internet上使用一个刮板为您获取免费代理,一个代理检查器来确保该池只包含有效的代理,以及IP循环系统等等。然而,你需要知道,使用公共IP池来进行任何合理的在线活动都不是个好主意——你会受到坏邻居、垃圾邮件和它们不可靠的特性的影响。2、数据中心代理IP池。数据中心代理IP池是只包含数据中心IP的代理池。DataCenterIP是数据中心拥有和管理的IP。DataCenterBroker池具有与数据中心代理相关的所有优点,但也具有与数据中心代理相关的所有缺点。在数据中心代理池中的代理存在许多障碍,因为它们易于检测。

对于爬虫来说,当你的访问频率达到了目标网站的预警值时,就可能触发目标网站的反爬机制。而封禁访问者ip就是很常见的一个反爬机制。

当ip被封禁后,从此ip发出的请求将不能得到正确的响应。这种时候,我们就需要一个代理ip池。

什么是代理ip池?

通俗地比喻一下,它就是一个池子,里面装了很多代理ip。它有如下的行为特征:

1.池子里的ip是有生命周期的,它们将被定期验证,其中失效的将被从池子里面剔除。 2.池子里的ip是有补充渠道的,会有新的代理ip不断被加入池子中。 3.池子中的代理ip是可以被随机取出的。 这样,代理池中始终有多个不断更换的、有效的代理ip,且我们可以随机从池子中取出代理ip,然后让爬虫程序使用代理ip访问目标网站,就可以避免爬虫被ban的情况。

今天,我们就来说一下如何构建自己的代理ip池。而且,我们要做一个比较灵活的代理池,它提供两种代理方式:

1.每次都通过http接口提取一个随机代理ip,然后在爬虫中使用此代理ip(大部分代理ip池服务都是这种形式) 2.使用squid3代理做请求转发,爬虫设置好squid3代理的地址,每次请求将由squid3自动转发给代理池中的代理 项目已经放到了github上,不想看原理、只想应用的可以直接移步github:open_proxy_pool

地址:https://github.com/AaronJny/open_proxy_pool

原理请往下看。

转载请注明出处:https://blog.csdn.net/aaronjny/article/details/87865942

代理池结构 代理池的组件可以大致描述如下:

1.代理IP的获取/补充渠道,定期把获取到的代理ip加入到代理池中 2.代理ip的验证机制,定期验证代理池中ip的有效性,并删除掉所有失效的ip 3.一个web服务,用以提供获取一个随机代理的api 4.squid3的维持脚本,它定期获取代理池中的可用ip,更新squid中的可转发代理列表 5.一个调度器,程序的入口,用来协调各组件的运行 如果不是很理解,没关系,请往下看,我会细说。

环境说明 为了实现代理IP池,我们如下的软件环境(列举主要部分):

1.redis服务器,用以存放代理池相关数据 2.flask,用以实现提取单个随机代理的api 3.squid3,用以实现代理转发 组件1-获取代理ip的渠道 我们有很多种渠道获取代理ip。笼统一点来说,可以分为两类,免费代理和收费代理。

免费代理,顾名思义嘛,最大的优点就是免费,不需要什么成本,网上搜一下就能找到。缺点也很明显,免费代理毕竟是免费的,所以质量根本不能保证,大部分无法使用,能用的多数也速度奇慢。

收费代理的质量相对来说就好多了,不同平台的代理质量和价格上都有些出入,可以自行比较。

个人学习的话,如果真的资金优先,可以考虑采集免费代理;如果资金相对充裕,可以花钱买一天或一周的代理使用,价格也不贵。我是比较推荐收费代理的,因为免费代理的质量真的不敢恭维。

企业商用的话,优先考虑收费代理吧,会稳定很多。

我选择的代理服务商是站大爷(http://ip.zdaye.com/),声明一下,我真的没收广告费啊= =。坦言说,站大爷的代理质量只能算一般,不过也够用。有几家的质量比它要好一些,不过好的有限。让我选择站大爷的最大原因是,它支持账号密码访问的模式。

没用过收费代理的朋友可能不清楚,使用收费代理平台的接口,从平台上批量提取代理ip或使用代理时,一般都是要绑定你的机器ip的。比如,你的机器ip是123.123.123.123,你就需要事先在平台上把ip绑定为123.123.123.123,这样,你只能通过IP为123.123.123.123的机器从平台提取ip,提取出的ip也只能由ip为123.123.123.123的机器使用,其他ip的机器都不行。当我们有多台机器的时候,就会非常尴尬了,毕竟不能给每台机器都买一次代理吧,很不划算。

在站大爷上面,除了绑定ip这个方法外,还可以选择使用账号+密码提取/使用代理,选择这个方法的话就不再收到IP地址的限制。讲道理,有点舒服啊= =

我先面的编码以站大爷为例,使用其他代理服务的可自行编写相关脚本,原理和逻辑都是相通的,部分细节上针对处理即可。

购买的细节我也不说了,如果需要购买的话,直接去官网购入短效优质代理即可。

先放出这部分的完整代码,附有注释。

-- coding: utf-8 -- @File : get_ip.py @Author: AaronJny @Date : 18-12-14 上午10:44 @Desc : 从指定网站上获取代理ip, 我目前在使用站大爷,就以站大爷为例

import requests import time import utils import settings from gevent.pool import Pool from gevent import monkey monkey.patch_all() class ZdyIpGetter: “”" 从站大爷上提取代理ip的脚本,使用其他代理服务的可自行编写相关脚本, 原理和逻辑都是相通的,部分细节上需要针对处理 “”" def init(self): # 购买服务时,网站给出的提取ip的api,替换成自己的 self.api_url = ‘http://xxxxxxxxxxxxxxxxxxxxxxxxxx’ self.logger = utils.get_logger(getattr(self.class, ‘name’)) self.proxy_list = [] self.good_proxy_list = [] self.pool = Pool(5) self.server = utils.get_redis_client() def check_proxy(self, proxy): “”" 检查代理是否可用, 并将可用代理加入到指定列表中 :param proxy: :return: “”" if settings.USE_PASSWORD: tmp_proxy = ‘{}:{}@{}’.format(settings.USERNAME, settings.PASSWORD, proxy) else: tmp_proxy = ‘{}’.format(proxy) proxies = { ‘http’: ‘http://’ + tmp_proxy, ‘https’: ‘https://’ + tmp_proxy, } try: # 验证代理是否可用时,访问的是ip138的服务 resp = requests.get(‘http://2019.ip138.com/ic.asp’, proxies=proxies, timeout=10) # self.logger.info(resp.content.decode(‘gb2312’)) # 判断是否成功使用代理ip进行访问 assert proxy.split(‘:’)[0] in resp.content.decode(‘gb2312’) self.logger.info(‘[GOOD] - {}’.format(proxy)) self.good_proxy_list.append(proxy) except Exception as e: self.logger.info(‘[BAD] - {} , {}’.format(proxy, e.args)) def get_proxy_list(self): “”" 提取一批ip,筛选出可用的部分 注:当可用ip小于两个时,则保留全部ip(不论测试成功与否) :return: “”" while True: try: res = requests.get(self.api_url, timeout=10).content.decode(‘utf8’) break except Exception as e: self.logger.error(‘获取代理列表失败!重试!{}’.format(e)) time.sleep(1) if len(res) == 0: self.logger.error(‘未获取到数据!’) elif ‘bad’ in res: self.logger.error(‘请求失败!’) # 检测未考虑到的异常情况 elif res.count(‘.’) != 15: self.logger.error(res) else: self.logger.info(‘开始读取代理列表!’) for line in res.split(): if ‘:’ in line: self.proxy_list.append(line.strip()) self.pool.map(self.check_proxy, self.proxy_list) self.pool.join() # 当本次检测可用代理数量小于2个时,则认为检测失败,代理全部可用 if len(self.good_proxy_list) < 2: self.good_proxy_list = self.proxy_list.copy() self.logger.info(‘>>>> 完成!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3