python檢測代理ip是否有效問題
更新時間:2023年08月12日 09:29:48 作者:小胖_@
這篇文章主要介紹了python檢測代理ip是否有效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
python檢測代理ip是否有效
測試環(huán)境
python3.6 、window10系統(tǒng)
測試方法
第一種
- 使用requests模塊。
- 使用requests.get() 發(fā)請求,根據(jù)其返回的網(wǎng)頁內(nèi)容進行判斷,代理ip是否有效。
import telnetlib try: telnetlib.Telnet(ip, port, timeout=3) print("代理IP有效!") except: print("代理IP無效!")
- 缺點:雖然可以檢測代理ip是否有效,但是該方法只能用于檢測少量的代理ip,原因是該方法檢測速度比較慢,主要耗時的是發(fā)請求這一過程。(可以使用)
第二種
- telnet 方法。
import telnetlibtry: telnetlib.Telnet(ip, port, timeout=3) print("代理IP有效!")except: print("代理IP無效!")
缺點:雖然該方法可以比較快速的驗證,但是經(jīng)測試發(fā)現(xiàn)一些代理ip可以測試通過,但實際上代理ip仍然無效。(不推薦使用)
第三種
利用的http://icanhazip.com/返回的IP進行校驗,如返回的是代理池的IP,說明代理有效,否則實際代理無效
def check_proxy(ip, port): """第二種:""" try: # 設(shè)置重連次數(shù) requests.adapters.DEFAULT_RETRIES = 3 # IP = random.choice(IPAgents) proxy = f"http://{<!-- -->ip}:{<!-- -->port}" # thisIP = "".join(IP.split(":")[0:1]) # print(thisIP) res = requests.get(url="http://icanhazip.com/", timeout=2, proxies={<!-- -->"http": proxy}) proxyIP = res.text if (proxyIP == proxy): print("代理IP:'" + proxyIP + "'有效!") return True else: print("2代理IP無效!") return False except: print("1代理IP無效!") return Falsedef check_proxy(ip, port): """第二種:""" try: # 設(shè)置重連次數(shù) requests.adapters.DEFAULT_RETRIES = 3 # IP = random.choice(IPAgents) proxy = f"http://{ip}:{port}" # thisIP = "".join(IP.split(":")[0:1]) # print(thisIP) res = requests.get(url="http://icanhazip.com/", timeout=2, proxies={"http": proxy}) proxyIP = res.text if (proxyIP == proxy): print("代理IP:'" + proxyIP + "'有效!") return True else: print("2代理IP無效!") return False except: print("1代理IP無效!") return False
推薦使用。
python批量檢測IP代理是否可用
首先,我們需要導(dǎo)入必要的庫:
import requests import time?
然后,我們可以定義一個函數(shù)來檢測代理是否可用:
def check_proxy(proxy): ? ? # 使用代理發(fā)起請求,如果返回狀態(tài)碼為200,說明代理可用 ? ? try: ? ? ? ? # 這里替換為你要請求的目標網(wǎng)站 ? ? ? ? response = requests.get('http://www.baidu.com', proxies={"http": proxy, "https": proxy}, timeout=5) ? ? ? ? if response.status_code == 200: ? ? ? ? ? ? return True ? ? except Exception: ? ? ? ? pass ? ? return False
接下來,我們可以讀取包含代理的文本文件,并將可用的代理寫入另一個文件中:
# 讀取代理列表 with open('proxies.txt', 'r') as f: ? ? proxy_list = f.read().splitlines() # 創(chuàng)建用于保存可用代理的列表 valid_proxies = [] # 遍歷代理列表,檢測代理是否可用 for proxy in proxy_list: ? ? if check_proxy(proxy): ? ? ? ? valid_proxies.append(proxy) # 將可用代理寫入文件 with open('valid_proxies.txt', 'w') as f: ? ? for proxy in valid_proxies: ? ? ? ? f.write(proxy + '\n')
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。