溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Squid代理服務器怎么搭建億級爬蟲IP代理池

發布時間:2021-09-10 18:15:38 來源:億速云 閱讀:373 作者:chen 欄目:服務器

這篇文章主要介紹“Squid代理服務器怎么搭建億級爬蟲IP代理池”,在日常操作中,相信很多人在Squid代理服務器怎么搭建億級爬蟲IP代理池問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Squid代理服務器怎么搭建億級爬蟲IP代理池”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

搭建思路

這里提供了大量的代理服務器資源,主要考慮如何將這些服務器分配給爬蟲服務器使用。最初的想法是使用Redis作為代理服務器資源隊列,一個程序自動獲取站大爺API提供的代理,驗證可用后push到Redis里,每個程序再從Redis中pop一個代理進行抓取,但這樣的缺點是不太好控制每臺爬蟲服務器的代理質量,有的代理速度快,有的速度比較慢,影響抓取效率,其次就是需要自行維護一套代理驗證、分配的程序,增加了代碼量,不便后期維護。

為了解決這些問題,我想到可以使用 Squid  提供的父代理功能,自動將爬蟲服務器的請求轉發給代理服務器。Squid提供了自動輪詢功能,自動驗證并剔除不可用的代理。減少了我們多余的驗證步驟。

爬蟲軟件只需將代理設置為 Squid 服務器即可,不需要每次重新設置為其他的代理服務器。

這套方案明顯減少了工作量,提高了易用性和可維護性。

實現過程

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"))

每次運行這個程序時,返回的IP都不一樣,而且僅有一個,說明IP代理池已經搭建成功,可以應用在網絡爬蟲項目中。

到此,關于“Squid代理服務器怎么搭建億級爬蟲IP代理池”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女