Python 爬虫抓取可用代理 IP,然后怎么用呢?
null
Python 爬虫抓取可用代理 IP,然后怎么用呢?
3 回复
import requests
from concurrent.futures import ThreadPoolExecutor
import time
class ProxyPool:
def __init__(self):
self.proxies = []
self.test_url = "http://httpbin.org/ip" # 测试代理是否可用的地址
def fetch_proxies(self):
"""从免费代理网站抓取IP(示例使用西刺代理)"""
url = "https://www.xicidaili.com/nn/"
headers = {'User-Agent': 'Mozilla/5.0'}
try:
resp = requests.get(url, headers=headers, timeout=10)
# 这里需要根据实际网页结构解析HTML
# 示例中仅演示流程,实际需要BeautifulSoup解析
print("抓取代理IP完成(需补充解析逻辑)")
# 模拟获取到的代理
self.proxies = [
'http://123.45.67.89:8080',
'http://111.222.333.444:8888'
]
except Exception as e:
print(f"抓取失败: {e}")
def test_proxy(self, proxy):
"""测试单个代理是否可用"""
try:
resp = requests.get(
self.test_url,
proxies={'http': proxy, 'https': proxy},
timeout=5
)
if resp.status_code == 200:
print(f"✅ {proxy} 可用")
return proxy
except:
pass
print(f"❌ {proxy} 无效")
return None
def validate_proxies(self):
"""验证所有代理IP"""
valid_proxies = []
with ThreadPoolExecutor(max_workers=10) as executor:
results = executor.map(self.test_proxy, self.proxies)
for result in results:
if result:
valid_proxies.append(result)
self.proxies = valid_proxies
print(f"验证完成,剩余 {len(self.proxies)} 个可用代理")
def get_proxy(self):
"""随机获取一个可用代理"""
import random
return random.choice(self.proxies) if self.proxies else None
def use_proxy_example(self):
"""使用代理发送请求的示例"""
proxy = self.get_proxy()
if not proxy:
print("没有可用代理")
return
try:
# 使用代理访问目标网站
resp = requests.get(
'https://httpbin.org/headers',
proxies={'http': proxy, 'https': proxy},
timeout=10
)
print(f"使用代理 {proxy} 成功")
print(f"响应内容: {resp.json()}")
except Exception as e:
print(f"请求失败: {e}")
# 使用示例
if __name__ == "__main__":
pool = ProxyPool()
# 1. 抓取代理
pool.fetch_proxies()
# 2. 验证代理
pool.validate_proxies()
# 3. 使用代理
if pool.proxies:
pool.use_proxy_example()
else:
print("没有可用的代理IP")
核心步骤:
- 抓取代理:从代理网站获取IP列表(需要实际解析HTML)
- 验证代理:用测试网址检查代理是否真正可用
- 使用代理:通过
requests.get(proxies={'http': proxy})参数传入代理
实际使用时需要:
- 补充代理网站的HTML解析逻辑(用BeautifulSoup)
- 定期更新代理池(代理IP失效很快)
- 考虑代理协议类型(HTTP/HTTPS/SOCKS)
总结:先验证再使用,别直接用抓来的IP。
proxy=ip
常用的 HTTP 请求库和爬虫框架都支持设代理的方法,去看下文档就好。

