短效代理IP到底怎么用?
写爬虫的朋友肯定遇到过这种情况:程序刚跑没一会儿,就报错超时,一看日志全是403或者请求被拒绝。这大概率是目标网站把你的真实IP给封了。这时候短效代理IP就派上用场了。短效代理IP的生命周期通常在几分钟到几十分钟不等,用完就扔,特别适合高频抓取数据的场景。
简单来说,短效代理IP就像是给你发了一张临时通行证。你每次去目标网站拿数据,都不用自己真实的身份去,而是拿着这张临时通行证去。这张通行证用个几分钟(比如天启代理提供的3-30分钟短效动态IP),到期了就作废,你再换一张新的。实际操作中,我们通常是通过服务商提供的API接口去提取这些IP。拿天启代理来说,它支持API快捷调用,你可以自定义提取数量等参数。程序拿到这批IP和端口后,把它们放到一个IP池里,爬虫每次发请求前,从池子里捞一个没过期的用就行了。
爬虫代码中如何设置代理IP?
在Python里写爬虫,最常用的就是requests库。设置代理其实非常简单,就是加一个proxies参数。天启代理支持终端IP授权和账号密码授权两种方式,下面分别演示一下具体的写法。
方式一:终端IP授权(白名单)
这种方式需要你先在天启代理后台把运行爬虫的服务器公网IP填进去。设置好之后,代码里直接写代理的IP和端口就行,不需要输入账号密码。
import requests
天启代理提取到的IP和端口
proxy_ip = "123.123.123.123:8080"
设置代理字典,注意http和https都要写
proxies = {
"http": f"http://{proxy_ip}",
"https": f"http://{proxy_ip}"
}
目标网址
url = "https://example.com"
try:
发送请求时传入proxies参数
response = requests.get(url, proxies=proxies, timeout=10)
print(f"请求成功,状态码:{response.status_code}")
except Exception as e:
print(f"请求失败:{e}")
方式二:账号密码授权
如果你不想绑定服务器IP,用账密授权更灵活。天启代理也支持这种方式,代码里需要把账号密码拼接到代理地址里。
import requests
天启代理的账号密码和IP端口
proxy_user = "your_username"
proxy_pass = "your_password"
proxy_ip = "123.123.123.123:8080"
拼接带账密的代理URL
proxy_url = f"http://{proxy_user}:{proxy_pass}@{proxy_ip}"
proxies = {
"http": proxy_url,
"https": proxy_url
}
url = "https://example.com"
try:
response = requests.get(url, proxies=proxies, timeout=10)
print(f"请求成功,状态码:{response.status_code}")
except Exception as e:
print(f"请求失败:{e}")
爬虫遇到封禁怎么办?自动重试机制的写法
虽然天启代理的IP可用率能达到99%以上,响应延迟也控制在10毫秒内,但爬虫在跑的过程中,偶尔遇到目标网站抽风或者某个IP刚好被目标网站临时拉黑,也是很正常的。如果因为一次请求失败就让整个程序停掉,那效率太低了。自动重试机制是写爬虫必须要加的。
这里我们用requests的Session对象配合retry模块来实现。思路是:如果请求失败或者状态码不是200,程序会自动换一个新的代理IP重试,直到达到最大重试次数。
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def get_session_with_retry(proxy_pool):
创建Session对象
session = requests.Session()
配置重试策略:总共重试3次,遇到429、500等状态码触发重试
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "POST"]
)
挂载重试适配器
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
从代理池里随机取一个代理(假设proxy_pool是一个列表)
if proxy_pool:
proxy_ip = proxy_pool.pop() 取一个并移除,避免重复使用
proxies = {
"http": f"http://{proxy_ip}",
"https": f"http://{proxy_ip}"
}
session.proxies = proxies
return session
使用示例
proxy_list = ["123.123.123.123:8080", "111.111.111.111:8080"] 假设这是你从天启代理API提取到的IP列表
url = "https://example.com"
for i in range(len(proxy_list)):
try:
session = get_session_with_retry(proxy_list)
response = session.get(url, timeout=10)
if response.status_code == 200:
print("抓取成功!")
break 成功就跳出循环
except Exception as e:
print(f"第 {i+1} 次尝试失败,准备换IP重试:{e}")
上面这段代码的逻辑很清晰:每次请求前从IP池里拿一个天启代理的IP,如果请求失败抛出异常,或者状态码不对,就会触发重试机制,换下一个IP继续干。这样能最大程度保证爬虫不断线。
天启代理在爬虫实战中的优势
选代理IP服务商不能只看价格,稳定性和速度才是决定爬虫效率的关键。在实战中,天启代理的几个核心特点能帮我们省去很多麻烦:
| 功能特点 | 对爬虫的实际帮助 |
|---|---|
| 全国200+城市节点,自建机房纯净网络 | 节点分布广,不容易被目标网站一锅端;自建机房网络纯净,降低被识别为机器人的风险。 |
| 响应延迟≤10毫秒,接口请求时间<1秒 | 抓取速度极快,不用在等待网络响应上浪费时间,大幅提升数据采集效率。 |
| 资源自由去重(24小时自动去重) | 避免短时间内拿到重复的IP去请求同一个网站,降低触发反爬策略的概率。 |
| 支持高并发调用,企业级分布式架构 | 多线程爬虫同时跑也没压力,业务量暴增也能扛得住,不会出现服务宕机的情况。 |
常见问题QA
Q1:为什么我提取的代理IP在代码里用不了,一直报错超时?
A:遇到这种情况,先检查两件事。第一,如果你用的是终端IP授权,确认你运行代码的这台机器的公网IP有没有加到天启代理的白名单里。很多人本地跑代码用的是动态公网IP,换了网络环境就忘了更新白名单。第二,看看是不是提取的IP已经过期了。短效IP生命周期短,提取出来要赶紧用,别放太久。天启代理的API接口请求时间不到1秒,建议随用随提。
Q2:自动重试机制里,重试几次比较合适?
A:一般设置3到5次就足够了。如果换了3到5个代理IP还是请求失败,那大概率不是代理IP的问题,可能是目标网站本身挂了,或者你的请求头、Cookie等参数没设置好,被识别出来了。这时候应该跳过这个请求,记录下日志,继续抓取下一个,不要死磕。
Q3:短效代理IP和长效IP在爬虫里怎么选?
A:如果你是高频抓取同一个网站的数据,比如几秒钟抓一次,那必须用短效动态IP,用完就换,天启代理的3-30分钟短效IP就很合适。如果你是需要登录某个网站后保持长时间的会话状态,比如、监控商品库存,那用长效静态IP更稳,避免频繁掉线重新登录。


