很多新手朋友在写Python爬虫代码时,经常遇到一个头疼的问题:明明花钱买了代理IP,也按照网上的教程把参数填进去了,结果一运行代码,要么直接报错连不上,要么目标网站还是显示自己本机的真实IP。折腾半天,代码改了又改,就是不知道问题出在哪。其实,Python里用代理IP,核心就两个参数的设置,只要这两步写错一步,前面全白忙活。今天咱们就来掰扯掰扯这两个关键点,帮你把代码跑通。
第一处关键:proxies字典的协议前缀绝对不能省
很多新手在写代码的时候,最容易栽跟头的地方就是proxies这个字典参数的写法。大家用requests库发请求时,都知道要传一个proxies进去,但是里面的键名怎么写,学问就大了。
有的朋友直接写成{"ip": "127.0.0.1:8080"},或者{"http": "127.0.0.1:8080"},连前面的http://前缀都给省了。这肯定是不行的。requests库在底层处理代理时,需要明确知道你发的是HTTP请求还是HTTPS请求,从而去匹配对应的代理通道。如果你把前缀省了,或者键名写错了,requests库就找不到对应的代理配置,最后就会默默走你的本地直连网络。
正确的写法是,必须带上协议前缀,并且http和https要分开写。就算你访问的是https网站,也建议把http的代理也一并写上,以防万一。
| 常见错误写法 | 正确写法 |
|---|---|
| proxies = {"http": "127.0.0.1:8080"} | proxies = {"http": "http://127.0.0.1:8080"} |
| proxies = {"https": "127.0.0.1:8080"} | proxies = {"https": "http://127.0.0.1:8080"} |
注意看上面的表格,即使你访问的是HTTPS网站,代理服务器的地址前缀通常也是http://(除非你的代理服务商明确告诉你使用的是HTTPS代理通道)。这是因为你是通过HTTP协议去连接代理服务器的,代理服务器再去帮你访问目标HTTPS网站。
第二处关键:SSL证书验证参数的坑
第二个让无数人抓狂的关键点,就是SSL证书验证的问题。现在大部分网站都上了HTTPS,当你用代理IP去访问这些网站时,代理服务器在转发请求的过程中,会涉及到SSL证书的握手。有时候代理IP的证书链不完整,或者目标网站的证书配置比较严格,Python就会直接抛出SSLError,导致程序中断。
很多新手看到这个报错就懵了,以为是代理IP买得不好不能用。其实,在测试阶段或者数据采集阶段,我们可以通过设置verify参数来绕过这个坑。
默认情况下,requests的verify=True,也就是它会严格校验SSL证书。如果你遇到了SSL报错,可以在请求里加上verify=False。这样requests就会忽略证书校验,直接把请求发出去。
import requests
神龙HTTP提取的代理IP
proxy_ip = "http://username:password@ip:port"
proxies = {
"http": proxy_ip,
"https": proxy_ip
}
目标网站
url = "https://example.com"
try:
关键点:verify=False 忽略SSL证书校验
response = requests.get(url, proxies=proxies, verify=False, timeout=10)
print("请求成功,状态码:", response.status_code)
print("返回内容长度:", len(response.text))
except Exception as e:
print("请求失败:", e)
加上verify=False之后,虽然能解决大部分因为证书导致的报错,但Python控制台可能会打印出一堆红色的警告信息,看着挺吓人。其实这只是警告,不影响程序运行。如果你想眼不见心不烦,可以在代码开头加上两行代码屏蔽掉这个警告。
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
选对代理服务,代码才能跑得稳
代码里的参数设置对了,只是成功了一半,另一半取决于你用的代理IP质量。如果IP池纯度不够,或者连通率低,代码写得再规范也是白搭。这里推荐大家使用神龙HTTP,国内三大运营商正规授权,千万级代理IP资源储备,每个IP都经过严格筛选,可用率高达99.9%。
神龙HTTP不仅IP纯度高达99.8%,低延迟且支持高并发提取,还兼容HTTP/HTTPS/SOCKS5协议,API接口能帮您快速集成到Python代码中。针对不同的业务需求,神龙HTTP提供了几种不同的套餐:
1. 短效动态IP池:以3/5/10/15/30分钟的短效动态IP为主,3000万+资源每日更新去重。如果你做的是高频公开数据采集,需要频繁更换IP,这个套餐非常合适,支持包量或包时计费,灵活度很高。
2. 固定IP池:基于高性能云主机构建,存活时间长,高连通率和高稳定性是其主要特性。按个数售卖,包时计费。如果你的业务对IP稳定性要求很高,不能频繁变动,选这个准没错。
神龙HTTP的个人中心还有可视化数据统计,能直观掌握IP使用情况,套餐管理也很方便,技术团队724小时在线支持,遇到问题随时能找到人解答。
常见问题QA
Q1:代码没报错,但目标网站还是显示我的真实IP,怎么回事?
A:这种情况十有八九是proxies字典写错了。请检查你的键名是不是"http"和"https",并且对应的值是不是包含了http://前缀。如果键名写成了"Http"或者"HTTP",在某些版本的requests库中可能无法识别,就会导致代理不生效,直接走本地网络。
Q2:程序运行提示“ProxyError”或者连接超时怎么办?
A:先检查你填写的代理IP地址、端口、账号密码是否正确。如果都没问题,可能是你提取的IP已经过期了。动态IP是有存活时间的,建议在代码里加上异常重试机制,一旦遇到ProxyError,就通过API重新提取一个新的IP再发请求。神龙HTTP的API接口兼容性很好,可以直接对接到你的代码里实现自动提取。


