国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内IP代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)
代理IP到底有啥用?
简单来说,代理ip就像一个中间人。平常你上网,是你的电脑直接跟网站服务器对话。用了代理IP,就变成了你的电脑先跟代理服务器说话,再由代理服务器去跟目标网站沟通。这样做有几个实实在在的好处:

它能隐藏你的真实IP地址。对需要保护隐私的用户来说,这很重要。对于需要大量采集公开数据的爬虫程序,使用代理IP可以避免因频繁访问而被目标网站封禁。一个IP被封了,换一个接着用,不影响任务。某些业务场景下,可能需要特定地区的IP来获取当地的内容或服务,代理IP可以轻松实现这一点。
市面上提供代理IP的服务商很多,比如专业的ipipgo,它整合了全球众多国家和地区的住宅IP资源,IP池庞大且纯净,能很好地满足上述需求。
Python requests库基础:不用代理先走通
在学用代理之前,咱们得先把基本的请求搞明白。Python里有个非常流行的库叫requestsHTTP请求特别简单。
先来看一个最简单的GET请求示例:
import requests url = 'https://httpbin.org/ip' 这个网站会返回你的IP信息 response = requests.get(url) print(response.json()) 打印出你的真实ip地址
运行这段代码,你会看到一个包含你本机IP地址的JSON数据。这就是没有使用任何代理时的情况。
requests库的功能很强大,除了GET,还支持POST、PUT、DELETE等各种HTTP方法,并且可以方便地添加请求头(Headers)、传递参数等。把这些基础操作练熟,是成功使用代理IP的前提。
给requests穿上“代理”外衣
现在进入正题,如何在requests请求中使用代理IP。requests库设计得很人性化,它允许你通过一个proxies参数来设置代理。
这个proxies参数是一个字典(Dictionary),你需要根据代理服务器使用的协议(如HTTP、HTTPS、SOCKS),分别指定代理地址。格式长这样:
proxies = {
"http": "http://10.10.1.10:3128", HTTP协议的代理地址和端口
"https": "http://10.10.1.10:1080", HTTPS协议的代理地址和端口
}
然后,在发请求时把这个字典传进去:
import requests
proxies = {
"http": "http://你的代理服务器IP:端口",
"https": "http://你的代理服务器IP:端口",
}
url = 'https://httpbin.org/ip'
response = requests.get(url, proxies=proxies)
print(response.json()) 这次返回的应该是代理服务器的IP了
注意,如果你的代理服务器需要用户名和密码认证,需要把地址写成这种格式:http://user:pass@ip:port。
实战演练:从ipipgo获取代理并用于爬虫
理论讲完了,我们来个真刀真枪的练习。假设你已经从ipipgo获得了代理IP的信息(比如一个HTTP代理的地址、端口、用户名和密码)。
ipipgo提供的代理IP类型丰富,支持全协议,无论是动态IP还是静态ip都能满足。我们以http代理为例:
import requests
从ipipgo获取的代理信息
proxy_ip = "1.2.3.4" 替换为你的代理IP
proxy_port = "54321" 替换为你的代理端口
proxy_user = "your_username" 替换为你的用户名
proxy_pass = "your_password" 替换为你的密码
构建带认证的代理字典
proxy_url = f"http://{proxy_user}:{proxy_pass}@{proxy_ip}:{proxy_port}"
proxies = {
"http": proxy_url,
"https": proxy_url, 假设这个代理也支持HTTPS
}
设置一个目标网站,例如一个测试IP的网站
test_url = "https://httpbin.org/ip"
try:
response = requests.get(test_url, proxies=proxies, timeout=10)
response.raise_for_status() 检查请求是否成功
print("请求成功!")
print("当前使用的IP是:", response.json())
except requests.exceptions.RequestException as e:
print("请求出错:", e)
这段代码的关键点在于正确拼接带认证信息的代理URL,并在请求时传入proxies参数。如果一切正常,httpbin.org/ip返回的将是你从ipipgo获取的那个代理ip地址,而不是你本机的IP。
高级技巧:让代理IP用得更溜
只会单个代理还不够,在实际项目中,我们往往需要管理一个IP池,让程序自动切换。
1. 构建IP池并随机选择
你可以把多个代理IP放在一个列表里,每次请求时随机选一个用。
import random
模拟一个IP池
proxy_pool = [
"http://user1:pass1@ip1:port1",
"http://user2:pass2@ip2:port2",
... 可以添加更多
]
def get_random_proxy():
return {"http": random.choice(proxy_pool), "https": random.choice(proxy_pool)}
使用随机代理发起请求
response = requests.get(url, proxies=get_random_proxy())
2. 处理代理失效的情况
代理IP可能会失效,所以代码里必须有容错机制。一个简单的思路是重试。
max_retries = 3
for i in range(max_retries):
try:
proxy = get_random_proxy()
response = requests.get(url, proxies=proxy, timeout=5)
如果状态码是200,说明可能成功了,但还要检查返回内容是否正常
if response.status_code == 200:
break 成功就跳出循环
except Exception as e:
print(f"第{i+1}次尝试失败:{e}")
if i == max_retries - 1:
print("所有重试均失败,请检查代理IP或网络。")
3. 会话保持(Session)
如果你需要在一系列请求中保持会话(如保持登录状态),并且这些请求都要通过同一个代理,使用requests.Session()是更好的选择。
session = requests.Session()
session.proxies.update(proxies) 为整个会话设置代理
后续所有用这个session发的请求都会自动使用代理
response1 = session.get('https://example.com/page1')
response2 = session.get('https://example.com/page2')
常见问题QA
Q1: 代码报错,提示代理连接失败,是哪里出了问题?
A1: 最常见的原因有几个:1)代理IP地址或端口号写错了;2)代理服务器需要认证,但用户名或密码错误/未提供;3)代理服务器本身不稳定或已失效;4)本地网络问题。建议先核对信息,然后用最简单的代码测试。
Q2: 用了代理IP,为什么访问速度变慢了?
A2: 这是正常现象。因为你的请求需要先绕到代理服务器,再由它转发,路程变长了,自然会有延迟。速度取决于代理服务器的网络质量、与你本机的物理距离以及负载情况。选择像ipipgo这样拥有高质量全球网络节点的服务商,可以在很大程度上保证速度和稳定性。
Q3: 我应该选择HTTP代理还是socks5代理?
A3: HTTP代理通常只能处理HTTP/HTTPS流量,而SOCKS5代理更底层,可以处理各种类型的流量(如FTP)。对于绝大多数网页爬虫和API调用,HTTP/HTTPS代理就足够了。socks5更灵活但可能稍慢一些。ipipgo全协议支持,你可以根据实际需求灵活选择。
Q4: 如何验证代理IP是否真的生效了?
A4: 最直接的方法就是访问一个能显示IP地址的网站,比如我们例子中一直用的 https://httpbin.org/ip。如果返回的IP地址和你设置的代理IP一致,那就说明生效了。
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)
















发表评论
发表评论: