欢迎来到阿里云授权服务中心典名科技有限公司!咨询电话:023-66887777 18623333330

微信
手机版
网站地图

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

2021-09-13 13:03:58 投稿人 : admin 围观 : 69 次 0 评论

“Squid代理服务器怎么搭建亿级爬虫IP代理池”,在日常操作中,相信很多人在Squid代理服务器怎么搭建亿级爬虫IP代理池问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Squid代理服务器怎么搭建亿级爬虫IP代理池”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

搭建思路

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

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

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

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

未标题-1.jpg

实现过程

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

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

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

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

3.重新配置 squid

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

4.自动更新,重复1-3

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

from gevent import monkey  # isort:skip monkey.patch_all()  # isort:skip import logging import os import time  import requests from gevent.pool import Pool  logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) formatter = logging.Formatter(     "%(asctime)s - %(name)s - %(levelname)s: - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" )  # 使用StreamHandler输出到屏幕 ch = logging.StreamHandler() ch.setLevel(logging.INFO) ch.setFormatter(formatter)  logger.addHandler(ch)  # Squid的配置文件语法 # 将请求转发到父代理 PEER_CONF = "cache_peer %s parent %s 0 no-query weighted-round-robin weight=1 connect-fail-limit=2 allow-miss max-conn=5\n" # 可用代理 GOOD_PROXIES = []  pool = Pool(50)   def check_proxy(proxy):     """验证代理是否可用     :param proxy list:[ip, port]"""     global GOOD_PROXIES     ip, port = proxy     _proxies = {"http": "{}:{}".format(ip, port)}     try:         ip_url = "http://2019.ip138.com/ic.asp"         res = requests.get(ip_url, proxies=_proxies, timeout=10)         assert ip in res.content         logger.info("[GOOD] - {}:{}".format(ip, port))         GOOD_PROXIES.append(proxy)     except Exception as e:         logger.error("[BAD] - {}:{}, {}".format(ip, port, e))   def update_conf():     with open("/etc/squid/squid.conf.original", "r") as F:         squid_conf = F.readlines()     squid_conf.append("\n# Cache peer config\n")     for proxy in GOOD_PROXIES:         squid_conf.append(PEER_CONF % (proxy[0], proxy[1]))     with open("/etc/squid/squid.conf", "w") as F:         F.writelines(squid_conf)   def get_proxy():     global GOOD_PROXIES     GOOD_PROXIES = []     # 1. 获取代理IP资源     api_url = "http://s.zdaye.com/?api=YOUR_API&count=100&fitter=1&px=2"     res = requests.get(api_url).content     if len(res) == 0:         logger.error("no data")     elif "bad" in res:         logger.error("bad request")     else:         logger.info("get all proxies")         proxies = []         for line in res.split():             proxies.append(line.strip().split(":"))         pool.map(check_proxy, proxies)         pool.join()         # 2. 写入Squid配置文件         update_conf()         # 3. 重新加载配置文件         os.system("squid -k reconfigure")         logger.info(">>>> DONE! <<<<")   def main():     start = time.time()     while True:         # 每30秒获取一批新IP         if time.time() - start >= 30:             get_proxy()             start = time.time()         time.sleep(5)   if __name__ == "__main__":     main()

使用方法

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

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

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

实例

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

from __future__ import print_function  import requests  s = requests.Session() s.proxies.update({"http": "139.xxx.xxx.66:3188"}) print(s.get("http://httpbin.org/ip"))


版权声明:本站部分文章内容、图片来源于网友推荐、互联网收集整理而来,仅供大家学习参考,不代表本站立场,如有侵权,请联系站长,我们会第一时间处理!本站原创内容未经允许不得转载,或转载时需注明出处:典名科技资讯门户

相关文章

  • 怎样弄linux查看进程的线程数?
    怎样弄linux查看进程的线程数?

      Linux系统的进程是由线程组成的,当然Linux进程下的线程数是不固定的,可以是一个进程,也可以是多个进程。下面就由和大家讲一讲linux查看进程。进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说,Li...

    2021-11-17 11:35:33
  • 云服务器的优势
    云服务器的优势

      基于云主机平台构建的一款新型云主机产品,其性能是云主机的性能,同时具备虚拟主机的全部功能。在主机控制面板上还具有服务器重启,CPU、内存、使用空间大小监控等功能。用户独享整个驰云服务器的软硬件资源,通过控制面板进行维护和管理,同时关闭远...

    2021-11-17 11:27:34
  • 微系统架构的特点
    微系统架构的特点

      微系统架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务...

    2021-11-17 11:20:34
  • 云建站有什么特点?
    云建站有什么特点?

      云建站是最近几年互联网领域兴起的全新的一种互联网基础应用模式,以前存放网站所有的服务器都是单击存在,各种服务之间没有明确的区分,来到云技术时代,随着虚拟化技术的进步,大规模集成式服务开始出现,由之前的单点式服务变为了集群式云服务,人们可...

    2021-11-17 11:13:35
  • 如何使用linux搭建vpn服务器?
    如何使用linux搭建vpn服务器?

      Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线...

    2021-11-17 11:09:36
  • 可靠云主机的优点和缺点
    可靠云主机的优点和缺点

      云主机是云计算在基础设施应用上的重要组成部分,位于云计算产业链金字塔底层,产品源自云计算平台。该平台整合了互联网应用三大核心要素:计算、存储、网络,面向用户提供公用化的互联网基础设施服务。云主机是一种类似VPS主机的虚拟化技术, VPS...

    2021-11-17 11:03:36
  • linux查看端口占用情况的步骤
    linux查看端口占用情况的步骤

      准备使用python写一个端口探测的小程序,以检测一些特定的服务端口有没有被占用,突然发现自己居然不知道在linux中如何查询端口被占用的情况,在项目的部署的时候,会遇到端口被占用的情况,需要我们先停下占用端口的进程,然后才能开启新的服...

    2021-11-17 11:01:36
  • tftp服务器软件特点有哪些?tftp服务器软件如何使用?
    tftp服务器软件特点有哪些?tftp服务器软件如何使用?

      tftp是一个传输文件的简单协议,而tftp服务器则可以用于IOS的升级和备份的工作,同时还可以用于文件的传输,现在有一种tftp服务器软件,很多朋友不知道它的情况,下面就来说说tftp服务器软件特点有哪些?tftp服务器软件如何使用。...

    2021-11-17 11:01:35
  • 传真服务器软件角色的步骤
    传真服务器软件角色的步骤

      Windows Server 2008 中的传真服务管理器提供了一个用于配置和管理传真资源的集中管理点。传真服务管理器是在服务器管理器中安装传真服务器角色时安装的。可以使用传真服务管理器为传入和传出传真流量配置传真设备、指定可以使用传真...

    2021-11-17 11:01:35
  • 什么服务器好用?选择服务器要注意什么问题?
    什么服务器好用?选择服务器要注意什么问题?

      什么服务器好用?选择服务器要注意什么问题?很多人在选择服务器产品时一味的看重内存大小,不关注品牌和售后服务问题,其实这个想法有失偏颇。建议大家在选择服务器时还要考虑到宽带以及机房等问题。   一、服务器是什么?   服务器是计算机的一种...

    2021-11-17 11:01:33
发表评论