写爬虫的时候,最常遇到的报错之一就是:
requests.exceptions.ConnectionError: HTTPConnectionPool
这篇文章帮你一次性搞清楚原因和解决办法。
报错原因
这个错误的意思是:你的Python程序连不上目标服务器。常见原因有4种:
-
网络不通(断网了/对方服务器挂了)
-
代理设置错误
-
请求频率太高被对方封IP
-
DNS解析失败
解决方法
方法一:检查网络连接
先确认你的电脑能正常访问目标网站:
import requests
try:
resp = requests.get("https://www.baidu.com", timeout=5)
print("网络正常")
except:
print("网络异常,先检查网络连接")
如果百度都访问不了,那就是你电脑的网络问题。
方法二:设置超时时间(推荐)
给请求加一个超时时间,避免卡死:
resp = requests.get(url, headers=headers, timeout=10)
建议设10-30秒,超过时间自动放弃,程序继续往下走。
方法三:加异常处理
最规范的写法,用try-except包住请求:
try:
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = "utf-8"
print(resp.text)
except requests.exceptions.ConnectionError:
print("连接失败,检查网络或目标网站")
except requests.exceptions.Timeout:
print("请求超时")
except Exception as e:
print(f"其他异常:{e}")
方法四:关掉代理
如果你电脑开了代理(VPN/梯子),requests可能会走代理导致连不上:
# 显式禁用代理
resp = requests.get(url, headers=headers, proxies={"http": "", "https": ""})
或者在环境变量里临时关掉。
方法五:加延时,降低频率
如果是因为请求太频繁被服务器断开连接:
import time import random # 每次请求间隔2-4秒 time.sleep(random.uniform(2, 4)) resp = requests.get(url, headers=headers)
总结
遇见 ConnectionError 不要慌,按这个顺序排查:
① 网络通不通? → 方法一 ② 有没有设超时? → 方法二 ③ 有没有try包住? → 方法三 ④ 代理有没有关? → 方法四 ⑤ 是不是请求太快? → 方法五
大部分情况下,方法二+方法三组合就能解决绝大多数问题。

1701

被折叠的 条评论
为什么被折叠?



