注意: IP精灵代理仅提供国内ip网络节点,不提供境外网络节点,不能用于任何非法用途或访问境外封闭网站,不能跨境联网,只能用于合法的国内网络加速。

您好,请登录 没有账号?

首页 > 新闻资讯 > Squid代理服务器搭建亿级爬虫IP代理池

Squid代理服务器搭建亿级爬虫IP代理池

来源:IP代理精灵 作者:admin 时间:2019-07-17 14:48:05

做爬虫抓取时,我们经常会碰到网站针对IP地址封锁的反爬虫策略。但只要有大量可用的IP资源,问题自然迎刃而解。


以前尝试过自己抓取网络上免费代理IP来搭建代理池,可免费IP质量参差不齐,不仅资源少、速度慢,而且失效快,满足不了快速密集抓取的需求。


收费代理提供的代理资源质量明显提升,最终选定使用IP代理精灵作为代理提供平台。


IP代理精灵每天能提供大概5万个不重复的短效高匿代理,每个代理存活期为2分钟,总IP数有20亿,IP数量足够使用。价格为包天30元,包月500元,还有半年及一年的套餐可供选择。只要能满足项目要求,提供优质稳定的服务,这些成本值得付出。


高匿代理才可以真正用来防止爬虫被封锁,如果使用普通代理,爬虫的真实IP还是会暴露。


搭建思路


IP代理精灵提供了大量的代理服务器资源,主要考虑如何将这些服务器分配给爬虫服务器使用。最初的想法是使用Redis作为代理服务器资源队列,一个程序自动获取IP代理精灵API提供的代理,验证可用后push到Redis里,每个程序再从Redis中pop一个代理进行抓取,但这样的缺点是不太好控制每台爬虫服务器的代理质量,有的代理速度快,有的速度比较慢,影响抓取效率,其次就是需要自行维护一套代理验证、分配的程序,增加了代码量,不便后期维护。


为了解决这些问题,我想到可以使用 Squid 提供的父代理功能,自动将爬虫服务器的请求转发给代理服务器。Squid提供了自动轮询功能,自动验证并剔除不可用的代理。减少了我们多余的验证步骤。


爬虫软件只需将代理设置为 Squid 服务器即可,不需要每次重新设置为其他的代理服务器。


这套方案明显减少了工作量,提高了易用性和可维护性。


实现过程


首先获取代理平台提供的代理服务器资源


建议购买短效代理,购买后在后台获取API地址并设置IP白名单等参数


将获取到的代理服务器写入squid配置文件


解析网站提供的代理服务器,按照一定规则写入 /etc/squid/squid.conf


重新配置 squid


写入配置文件之后重新加载最新的文件,不会造成中断


自动更新,重复1-3


由于网站提供的代理存活时间只有2分钟,所以需要每隔一段时间重新获取一批新IP

gevent monkey  monkey.patch_all()  logging
os
time

requests
gevent.pool Pool

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter(
    =)

ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(formatter)

logger.addHandler(ch)

PEER_CONF = GOOD_PROXIES = []

pool = Pool()


(proxy):
    GOOD_PROXIES
    ipport = proxy
    _proxies = {: .format(ipport)}
    :
        ip_url = res = requests.get(ip_url=_proxies=)
        ip res.content
        logger.info(.format(ipport))
        GOOD_PROXIES.append(proxy)
    e:
        logger.error(.format(ipporte))


():
    () F:
        squid_conf = F.readlines()
    squid_conf.append()
    proxy GOOD_PROXIES:
        squid_conf.append(PEER_CONF % (proxy[]proxy[]))
    () F:
        F.writelines(squid_conf)


():
    GOOD_PROXIES
    GOOD_PROXIES = []
    api_url = res = requests.get(api_url).content
    (res) == :
        logger.error()
    res:
        logger.error()
    :
        logger.info()
        proxies = []
        line res.split():
            proxies.append(line.strip().split())
        pool.map(check_proxyproxies)
        pool.join()
        update_conf()
        os.system()
        logger.info()


():
    start = time.time()
    :
        time.time() - start >= :
            get_proxy()
            start = time.time()
        time.sleep()


__name__ == :
    main()

使用方法


按Squid 搭建正向代理服务器、Squid 配置高匿代理介绍的方法搭建运行 Squid 高匿服务器


备份原始配置文件cp /etc/squid/squid.conf /etc/squid/squid.conf.original,以供软件使用


在squid服务器上运行python zdy.py


实例


如果按照上述方法搭建好代理IP池,只需要在爬虫代码中设置设置squid代理服务器地址和端口(比如139.xxx.xxx.66:3188)。

__future__ print_function

requests

s = requests.Session()
s.proxies.update({: })
(s.get())

每次运行这个程序时,返回的IP都不一样,而且仅有一个,说明IP代理池已经搭建成功,可以应用在网络爬虫项目中。


总结


这套解决方案结合了网络上的大量优质代理资源以及Squid服务器提供的特性,基本解决了网站对于爬虫IP的封锁。


成本比较低,而且有比较高的易用性,很方便地能结合到各种爬虫应用中,只需要增加一个代理地址即可,而由 Squid 统一管理父代理,不需要在爬虫程序中进行代理的获取验证等等操作,便于维护。


实际使用中还没有发现什么特别重大的问题,更多扩展性还有待后续继续研究。


最新资讯

推荐阅读

  1. 09

    2019-07

    IP代理精灵的短效优质代理IP为什么都连接不上

    有朋友用了IP代理精灵的短效优质代理IP发现,没有一个连接成功。这是为什么呢,难道IP代理精灵的代理IP出问题了?并非如此,IP代理精灵的短效优质代理IP需要绑定使用代理的机器IP授权,如

  2. 17

    2019-07

    Squid代理服务器搭建亿级爬虫IP代理池

    做爬虫抓取时,我们经常会碰到网站针对IP地址封锁的反爬虫策略。但只要有大量可用的IP资源,问题自然迎刃而解。以前尝试过自己抓取网络上免费代理IP来搭建代理池,可免费IP质量参差不齐

  3. 01

    2019-06

    手机动态IP地址切换软件

    现在手机的使用比较广,不管是手机工作还是手机娱乐,也是可能需要更换IP地址的,那么手机动态IP地址切换软件哪款好用呢?其实目前有很多工具都能够满足手机ip的修改需求,只不过每个人

  4. 22

    2019-05

    大数据产业下的代理IP该如何使用

    常常能在电视剧或者电影中可以看见,很多电脑高中,通过某一个或者几个特征信息,输入到电脑软件中,就能找到该目标任务的信息。有的时候他们会使用其他ip地址,使得被查看人无法追踪

  5. 29

    2019-01

    大量采集数据,爬虫如何运用多线程?

    一般使用到爬虫的项目,需要抓取的任务量并不低,但靠单线程是无法满足抓取的效率,于是爬虫通过使用代理IP,多IP的使用,采用多线程的方法来大量抓取数据,这爬虫如何运用多线程呢?

  6. 17

    2019-06

    怎么找到合适的HTTP代理IP

    怎么找到合适的HTTP代理IP?近年来互联网的发展速度是惊人的,在网络发达的今天,很多行业都在互联网中兴起。为了更好的发展与效益,互联网的竞争也是非常激烈的。我们都知道网络爬虫的