注意: 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. 04

    2019-05

    如何快速改电脑IP地址

    如何快速改电脑IP地址?很多游戏、网站、以及一些账号的注册等等会限制IP,于是很多亲会苦恼于如何更改电脑IP,小编前段时间就深陷其中,研究良久,终于明白了两个方法,特地在此分享给

  2. 28

    2019-05

    怎么选择代理ip?有什么技巧?

    怎么选择代理ip?有什么技巧?ip代理精灵的代理ip实效性较强,一般有效期在20分钟到4小时不等。在选择代理ip使用时的技巧需要十分注意,有时候选择不好,花高价钱买了代理ip可能并不适合

  3. 11

    2019-11

    爬虫IP被封的六种解决方案

    爬虫IP被封的六种解决方案!爬虫在采集数据的过程中,不可避免会遇到反爬虫封锁问题,这让我们的爬虫工作不得不终止下来,那遇到这种情况该怎么办呢?有没有对应的解决方案呢?今天ip代理

  4. 20

    2019-04

    代理ip对教育行业有什么帮助

    代理IP对教育行业有什么帮助?随着二胎政策的开放,很多家庭也预备着为家庭带来第二个孩子,从未来教育的规划角度来看,二胎政策的开放,开拓了教育机构的延伸和发展。所以现在很多的

  5. 21

    2019-08

    用你们的代理访问网站还会被封吗?

    很多IP代理精灵的客户会有这样的疑问,用你们的代理访问网站还会被封吗?IP代理精灵的所有IP都是来源自建,使用动态代理能极大程度减少被封的概率,但不合理的策略仍然可能会导致被封,

  6. 15

    2019-05

    Linux主机如何通过代理服务器进行网络连接

    Linux主机如何通过代理服务器进行网络连接?我们都知道在Windows下通过代理服务器怎么去设置连接代理服务器,浏览器---->工具------>internet选项----->连接--->局域网设置------->勾选“为lan使用代理