使用Python Requests登录网站爬取时遇Errno 10060连接失败求助
解决Python Requests爬取网站时的Errno 10060连接失败问题
Errno 10060 通常意味着你的请求无法在规定时间内到达目标服务器,或者被网络/服务器层面拦截了。结合你的代码,我整理了几个优先级从高到低的排查和解决步骤:
1. 先确认目标网站的可达性与登录接口正确性
- 首先用浏览器手动访问
https://nextelloc.nextelinternational.com和https://nextelloc.nextelinternational.com/default.asp?sec=vehiculos_listado,看看能不能正常打开、完成登录。如果浏览器也无法访问,那大概率是你的网络环境(比如公司防火墙、地区限制)或者目标服务器本身的问题,需要先解决网络连通性。 - 重点检查登录接口URL:你的代码直接POST到根域名,但很多网站的登录请求是提交到具体的接口(比如
/login.asp或者/api/login)。打开浏览器的开发者工具(F12),切换到「网络」标签,手动完成登录操作,找到登录时发送的POST请求的URL,替换掉代码中的login_url——这很可能是问题所在。
2. 给请求添加超时参数
Requests默认没有设置超时,会无限等待,最终触发系统层面的10060错误。给POST请求加上超时限制,既能快速定位问题,也避免程序挂起:
result = session.post(login_url, data=datos, timeout=10) # 10秒超时
3. 模拟浏览器请求头
很多网站会通过检查User-Agent来拦截非浏览器的请求。给你的session添加浏览器风格的请求头:
session.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9', 'Referer': 'https://nextelloc.nextelinternational.com' # 模拟从首页跳转登录 })
4. 处理代理(如果需要)
如果你是在公司网络或者需要代理才能访问外部网站,必须在代码中配置代理:
proxies = { 'http': 'http://your-proxy-address:port', 'https': 'https://your-proxy-address:port', } result = session.post(login_url, data=datos, proxies=proxies, timeout=10)
替换成你实际使用的代理地址和端口即可。
5. 临时跳过SSL验证(谨慎使用)
如果目标网站的SSL证书存在问题(比如自签名证书),也可能导致连接失败。可以临时关闭SSL验证排查,但这会降低安全性,仅用于测试:
import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 禁用证书警告 result = session.post(login_url, data=datos, verify=False, timeout=10)
最后提醒:爬取目标网站前,请务必遵守网站的robots.txt规则和使用条款,避免违规爬取行为。
内容的提问来源于stack exchange,提问作者Nicolás Salvatore
相关产品推荐
相关产品推荐

