python檢測(cè)代理ip是否有效問(wèn)題
python檢測(cè)代理ip是否有效
測(cè)試環(huán)境
python3.6 、window10系統(tǒng)
測(cè)試方法
第一種
- 使用requests模塊。
- 使用requests.get() 發(fā)請(qǐng)求,根據(jù)其返回的網(wǎng)頁(yè)內(nèi)容進(jìn)行判斷,代理ip是否有效。
import telnetlib
try:
telnetlib.Telnet(ip, port, timeout=3)
print("代理IP有效!")
except:
print("代理IP無(wú)效!")- 缺點(diǎn):雖然可以檢測(cè)代理ip是否有效,但是該方法只能用于檢測(cè)少量的代理ip,原因是該方法檢測(cè)速度比較慢,主要耗時(shí)的是發(fā)請(qǐng)求這一過(guò)程。(可以使用)
第二種
- telnet 方法。
import telnetlibtry: telnetlib.Telnet(ip, port, timeout=3) print("代理IP有效!")except: print("代理IP無(wú)效!")
缺點(diǎn):雖然該方法可以比較快速的驗(yàn)證,但是經(jīng)測(cè)試發(fā)現(xiàn)一些代理ip可以測(cè)試通過(guò),但實(shí)際上代理ip仍然無(wú)效。(不推薦使用)
第三種
利用的http://icanhazip.com/返回的IP進(jìn)行校驗(yàn),如返回的是代理池的IP,說(shuō)明代理有效,否則實(shí)際代理無(wú)效
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無(wú)效!") return False except: print("1代理IP無(wú)效!") 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無(wú)效!")
return False
except:
print("1代理IP無(wú)效!")
return False推薦使用。
python批量檢測(cè)IP代理是否可用
首先,我們需要導(dǎo)入必要的庫(kù):
import requests import time?
然后,我們可以定義一個(gè)函數(shù)來(lái)檢測(cè)代理是否可用:
def check_proxy(proxy):
? ? # 使用代理發(fā)起請(qǐng)求,如果返回狀態(tài)碼為200,說(shuō)明代理可用
? ? try:
? ? ? ? # 這里替換為你要請(qǐng)求的目標(biāo)網(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接下來(lái),我們可以讀取包含代理的文本文件,并將可用的代理寫(xiě)入另一個(gè)文件中:
# 讀取代理列表
with open('proxies.txt', 'r') as f:
? ? proxy_list = f.read().splitlines()
# 創(chuàng)建用于保存可用代理的列表
valid_proxies = []
# 遍歷代理列表,檢測(cè)代理是否可用
for proxy in proxy_list:
? ? if check_proxy(proxy):
? ? ? ? valid_proxies.append(proxy)
# 將可用代理寫(xiě)入文件
with open('valid_proxies.txt', 'w') as f:
? ? for proxy in valid_proxies:
? ? ? ? f.write(proxy + '\n')總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python+OpenCV實(shí)現(xiàn)在圖像上繪制矩形
這篇文章主要介紹了如何利用Python和OpenCV實(shí)現(xiàn)在圖像上繪制任意大小的矩形,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2022-03-03
Python利用redis-py實(shí)現(xiàn)哈希數(shù)據(jù)類(lèi)型的常用指令操作
這篇文章我們繼續(xù)學(xué)習(xí) “redis-py” 模塊的一些關(guān)于 “哈希數(shù)據(jù)類(lèi)型” 的相關(guān)指令用方法,比如利用 pyton 實(shí)現(xiàn)操作 “哈希表” 的數(shù)據(jù)、操作 “redis” 的事務(wù)等等2022-09-09
python basemap 畫(huà)出經(jīng)緯度并標(biāo)定的實(shí)例
今天小編就為大家分享一篇python basemap 畫(huà)出經(jīng)緯度并標(biāo)定的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python程序設(shè)計(jì)入門(mén)(2)變量類(lèi)型簡(jiǎn)介
這篇文章主要介紹了Python變量類(lèi)型,需要的朋友可以參考下2014-06-06
python區(qū)塊鏈地址的簡(jiǎn)版實(shí)現(xiàn)
這篇文章主要為大家介紹了python區(qū)塊鏈地址的簡(jiǎn)版實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
使用python解決化學(xué)問(wèn)題的實(shí)用指南
在當(dāng)今科學(xué)技術(shù)迅速發(fā)展的時(shí)代,計(jì)算機(jī)科學(xué)與各個(gè)學(xué)科的結(jié)合愈發(fā)緊密,尤其是在化學(xué)領(lǐng)域,本博文旨在探討如何利用Python解決一些常見(jiàn)的化學(xué)問(wèn)題,包括構(gòu)建分子式、判斷化合價(jià)、解析分子式、平衡化學(xué)反應(yīng)方程式以及計(jì)算化合物的摩爾質(zhì)量等,需要的朋友可以參考下2024-10-10
python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式
這篇文章主要介紹了python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Python離線環(huán)境如何將文字轉(zhuǎn)語(yǔ)音文件
這篇文章主要介紹了Python離線環(huán)境實(shí)現(xiàn)將文字轉(zhuǎn)語(yǔ)音文件的過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06

