Python如何獲取免費(fèi)高匿代理IP及驗(yàn)證
代理IP
代理IP的匿名性可以分為三個(gè)級(jí)別。
- 第一是透明代理,將自己標(biāo)識(shí)為網(wǎng)站服務(wù)器的代理,并提供您的原始IP地址。
- 第二是匿名代理,不會(huì)向服務(wù)器提供您的IP地址,而是將自己標(biāo)識(shí)為代理,以便服務(wù)器知道您正在通過(guò)另一個(gè)IP路由請(qǐng)求。
- 第三則是高匿名代理,它隱藏您的IP地址而不將自己標(biāo)識(shí)為代理。常規(guī)代理會(huì)讓服務(wù)器知道它正在使用代理地址,但高度匿名的代理會(huì)將自己偽裝成普通用戶(hù)。
在一些情況下,使用高匿代理IP能夠?qū)崿F(xiàn)一些“用途”,好幾年前,有個(gè)自學(xué)網(wǎng)站可以讓好友點(diǎn)擊邀請(qǐng)鏈接即可獲取積分,網(wǎng)站只對(duì)點(diǎn)擊的IP來(lái)源進(jìn)行檢測(cè),所以只要使用高匿代理IP偽裝一下,就可以達(dá)到刷積分的目的。
現(xiàn)今也不推崇去干這事了,但技術(shù)本身無(wú)錯(cuò),借此做個(gè)分享,用Python實(shí)現(xiàn)代理IP的采集和驗(yàn)證。
采集代理IP
因?yàn)槲移匠9ぷ鞑簧婕斑@類(lèi)東西,所以涉及的網(wǎng)站均是網(wǎng)上隨便搜索的,免費(fèi)能用就行。
我找了兩個(gè)IP網(wǎng)站,一個(gè)采集過(guò)程中封我IP,一個(gè)還算順利,代碼如下:
def kxdaili():
for i in range(10):#10頁(yè)
url = f'http://www.kxdaili.com/dailiip/1/{i+1}.html'
response = requests.get(url=url)
pattern = r'<td>([\d.]+)</td>'#匹配出<td></td>之間的內(nèi)容,并只保留其中是數(shù)字和小數(shù)點(diǎn).的部分
results = re.findall(pattern, response.text)
print(results)
for n in range(10):
try:
ip_temp = results[2*n] + ":" + results[2*n+1]
#print(ip_temp)
ip.append(ip_temp)
except Exception:
print("沒(méi)了")
break
#xpath報(bào)錯(cuò),奇葩,瀏覽器調(diào)試正常
#ip = result.xpath(f"/html/body/div[2]/div[2]/div[2]/div[2]/div[1]/div[2]/table/tbody/tr[{n + 1}]/td[1]/text()")[0]
#port = result.xpath(f"/html/body/div[2]/div[2]/div[2]/div[2]/div[1]/div[2]/table/tbody/tr[{n + 1}]/td[2]/text()")[0]
time.sleep(5)
print(ip)驗(yàn)證IP
上面采集到的代理IP還需要進(jìn)行一個(gè)驗(yàn)證,主要是驗(yàn)證其匿名性和可用性,如果匿名程度不夠,一下就會(huì)被對(duì)方服務(wù)器發(fā)現(xiàn),不方便進(jìn)行其他操作。
驗(yàn)證網(wǎng)址如下:
http://httpbin.org/get?show_env=1
下面代碼中加了5秒超時(shí)判斷,用于檢測(cè)IP的可用性,用上面網(wǎng)址的返回內(nèi)容檢測(cè)IP的匿名程度,檢測(cè)結(jié)果應(yīng)該還可以接受,也可找其他接口進(jìn)行檢測(cè)。
def ceshi():
#ip = ['47.100.90.127:4444', '47.96.70.163:8888', '117.74.65.207:8118', '124.70.205.56:8089', '39.104.62.128:9999', '116.63.130.30:1081', '121.37.201.60:8080', '112.124.2.212:8888', '120.79.31.133:52869', '120.31.52.68:8118', '8.134.138.108:8888', '8.213.128.6:808', '120.46.215.52:3000', '124.70.221.252:8080', '122.9.151.210:3132', '139.224.56.162:1234', '8.219.169.172:20', '58.220.95.30:10174', '139.196.151.191:8080', '123.57.1.16:59394', '39.104.57.170:10001', '115.182.212.177:80', '120.79.7.173:8888', '8.134.140.146:9999', '8.130.39.117:8080', '47.113.224.182:83', '8.209.253.237:8999', '39.104.26.204:8889', '101.132.25.152:50001', '116.63.128.247:8889', '120.46.197.14:8083', '8.219.74.58:1000', '115.29.149.2:8282', '139.196.214.238:2087', '121.37.203.216:3128', '47.109.53.253:45554', '47.106.144.184:7890', '139.9.119.20:80', '47.113.219.226:9091', '123.60.139.197:6969', '47.98.134.232:9992', '117.74.65.29:8181', '47.99.180.88:7890', '101.200.235.69:9000', '47.92.248.86:10000', '139.196.78.175:7890', '120.79.21.48:3127', '47.109.46.223:5678', '47.109.57.93:6969', '139.129.231.228:5001', '123.60.109.71:8090', '120.79.16.132:8080', '8.130.34.44:1234', '8.219.5.240:8080', '116.62.50.250:7890', '121.37.207.154:8999', '120.79.34.201:30001', '47.92.247.250:10000', '8.212.23.2:80', '39.100.120.200:7890', '120.55.49.231:20000', '123.57.1.78:10443', '121.40.115.140:8080', '115.29.148.215:8118', '101.200.187.233:19', '122.9.131.161:3128', '8.213.128.90:8080', '123.56.129.203:50001', '124.71.157.181:8888', '101.34.72.57:7890', '8.130.36.245:8080', '8.219.43.134:20201', '121.37.199.23:8089', '39.104.79.145:8499', '47.113.203.122:41890', '8.208.84.236:8080', '47.92.248.197:41890', '8.134.136.224:8080', '47.113.221.120:1080', '47.92.242.45:8999', '8.134.139.219:8080', '61.130.9.37:443', '8.130.34.237:8080', '140.210.196.193:8060', '47.92.239.69:8081', '47.113.230.224:3333', '115.29.151.41:8081', '8.213.137.155:80', '8.208.90.243:8999', '139.198.168.65:7890', '117.74.65.215:9443']
url = 'http://httpbin.org/get?show_env=1'
for i in range(len(ip)):
ip_temp = ip[i].split(":")
proxies = {
'http': ip[i],
#'https': 'http://60.182.184.172:8888'
}
try:
response = requests.get(url, proxies=proxies, timeout=5)
#print(response.text)
if response.text.find(ip_temp[0]) != -1:
print(ip[i], "-----------匿名")
else:
print(ip[i], "-----------非匿名")
except requests.Timeout:
print(ip[i],"-----------請(qǐng)求超時(shí)")
except:
print(ip[i],"-----------請(qǐng)求發(fā)生異常")總結(jié)
運(yùn)行結(jié)果:

免費(fèi)的代理IP可用性和匿名程度肯定不穩(wěn)定,對(duì)于一般用途或者漲知識(shí)還是可以了解了解。
有條件的就選擇付費(fèi)的服務(wù),但切勿用于非法用途。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)冒泡排序算法的兩種方法
本篇文章主要介紹了python實(shí)現(xiàn)冒泡排序的兩種方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Python快速實(shí)現(xiàn)一鍵摳圖功能的全過(guò)程
你有沒(méi)想過(guò),Python也能成為這樣的一種工具:在只有一張圖片,需要細(xì)致地?fù)赋鋈宋锏那闆r下,能幫你減少摳圖步驟,這篇文章主要給大家介紹了關(guān)于Python快速實(shí)現(xiàn)一鍵摳圖功能的相關(guān)資料,需要的朋友可以參考下2021-06-06
Python運(yùn)行中頻繁出現(xiàn)Restart提示的解決辦法
在編程的世界里,遇到各種奇怪的問(wèn)題是家常便飯,但是,當(dāng)你的 Python 程序在運(yùn)行過(guò)程中頻繁出現(xiàn)“Restart”提示時(shí),這可能不僅僅是令人頭疼的小問(wèn)題,而是隱藏著深層次的原因,本文將深入探討這一現(xiàn)象,并提供解決方案,需要的朋友可以參考下2025-04-04
Scrapy項(xiàng)目實(shí)戰(zhàn)之爬取某社區(qū)用戶(hù)詳情
這篇文章主要介紹了Scrapy項(xiàng)目實(shí)戰(zhàn)之爬取某社區(qū)用戶(hù)詳情,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python面向?qū)ο髮?shí)現(xiàn)數(shù)據(jù)分析的實(shí)例詳解
這篇文章主要通過(guò)幾個(gè)實(shí)例為大家詳細(xì)介紹了Python面向?qū)ο髮?shí)現(xiàn)數(shù)據(jù)分析的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2023-01-01
Django haystack實(shí)現(xiàn)全文搜索代碼示例
這篇文章主要介紹了Django haystack實(shí)現(xiàn)全文搜索代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
pandas中DataFrame字典互轉(zhuǎn)的實(shí)現(xiàn)
在數(shù)據(jù)處理和分析中,Pandas是一個(gè)非常強(qiáng)大的Python庫(kù),本文主要介紹了pandas中DataFrame字典互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04

