爬虫设置代理用什么函数?Python请求库实战示例

代理IP 2025-11-26 代理知识 35 0
A⁺AA⁻
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内IP代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)

一、Python爬虫为什么要用代理IP

当你在用Python做数据采集时,网站服务器会根据请求频率和IP地址判断是否正常访问。如果短时间内用同一个IP频繁请求,轻则收到验证码弹窗,重则直接被封禁IP。这时候就需要通过代理ip来分散请求,让目标网站以为是不同用户在访问。

爬虫设置代理用什么函数?Python请求库实战示例

比如用ipipgo的住宅代理IP服务,每次请求都能切换真实的家庭宽带IP,9000多万个ip地址池能有效避免被识别为机器流量。特别是需要长时间运行的爬虫项目,动态IP轮换功能可以自动更换出口IP,保持稳定采集。

二、Python请求库设置代理的两种方式

1. Requests库设置代理

在requests.get()或requests.post()方法中,通过proxies参数传递代理信息。注意要区分HTTP和https协议:

import requests

proxies = {
    'http': 'http://用户名:密码@gateway.ipipgo.com:端口',
    'https': 'http://用户名:密码@gateway.ipipgo.com:端口'
}

response = requests.get('https://目标网站.com', proxies=proxies)

如果使用ipipgo的动态住宅IP服务,建议配合Session对象使用,避免重复认证:

with requests.Session() as s:
    s.proxies = proxies
    s.get('https://目标网站.com')   自动应用代理

2. Urllib库设置代理

对于使用原生urllib的情况,需要通过ProxyHandler创建opener:

from urllib.request import ProxyHandler, build_opener

proxy = ProxyHandler({
    'http': 'http://gateway.ipipgo.com:端口',
    'https': 'http://gateway.ipipgo.com:端口'
})
opener = build_opener(proxy)
response = opener.open('https://目标网站.com')

三、代理IP使用中的实战技巧

技巧1:异常处理机制
建议在代码中添加重试逻辑,当遇到连接超时或认证失败时自动切换IP。ipipgo的API支持按失败次数自动更换节点,配合以下代码更稳定:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

retries = Retry(total=3, backoff_factor=1)
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=retries))
s.mount('https://', HTTPAdapter(max_retries=retries))

技巧2:IP轮换策略
对于需要切换ip的场景,可以使用ipipgo的动态住宅IP服务,通过API获取最新代理地址:

import requests

def get_new_proxy():
    resp = requests.get('https://api.ipipgo.com/dynamic')
    return resp.json()['proxy_address']

四、常见问题QA

Q:代理IP连接超时怎么办?
A:先检查代理地址和端口是否正确,再测试本地网络能否访问gateway.ipipgo.com。如果使用高匿名住宅IP,建议开启自动重连功能。

Q:如何验证代理是否生效?
A:访问http://ip.ipipgo.com/checkip,查看返回的IP地址是否变化。建议在代码中加入校验逻辑:

def check_proxy(proxy):
    try:
        resp = requests.get('http://ip.ipipgo.com/checkip', 
                         proxies=proxy, timeout=5)
        return resp.status_code == 200
    except:
        return False

Q:遇到407代理认证错误怎么处理?
A:确认用户名密码包含特殊字符时是否经过URL编码,建议使用requests的auth参数:

from requests.auth import HTTPProxyAuth

auth = HTTPProxyAuth('用户名', '密码')
requests.get(url, proxies=proxies, auth=auth)

五、为什么选择ipipgo?

作为全球代理IP专业服务商,ipipgo有两个核心优势:
1. 覆盖全球240+国家/地区,特别适合需要特定地区IP的场景
2. 真实住宅IP资源,所有IP均来自家庭宽带用户,不易被识别为代理流量

技术层面支持socks5、HTTP/HTTPS全协议,动态静态ip自由切换。通过智能路由技术,平均响应速度比普通代理快40%,特别适合需要高并发的爬虫项目。

国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)

发表评论

发表评论:

扫一扫,添加您的专属销售

扫一扫,添加您的专属销售