Python中求解诡异问题:本地运行正常,服务器上跑报错 urllib.error.HTTPError: HTTP Error 503
使用的 Python3 版本,基于 flask 写的 web 网站,python3 app.py 直接跑起来后,用 nginx 做代理访问。本机测试时可以爬取网页内容,放在服务器上就报: urllib.error.HTTPError: HTTP Error 503: Service Temporarily Unavailable。 测试过服务器和要爬的地址是通的,代理 ip 也是可用的。
直接上源码:
def search(name):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'}
chaper_url = "https://cn.torrentkitty.tv/search/%s/" % parse.quote(name)
cookie = cookiejar.CookieJar()
handler = request.HTTPCookieProcessor(cookie)
proxy_handler = request.ProxyHandler({'http': 'http://101.96.11.5:80'})
opener = request.build_opener(handler, proxy_handler)
myRequest = request.Request(url=chaper_url, headers=headers)
myResponse = opener.open(myRequest)
Python中求解诡异问题:本地运行正常,服务器上跑报错 urllib.error.HTTPError: HTTP Error 503
11 回复
你需要一个 Docker…
这个503错误是服务器端的问题,不是你的代码问题。503表示服务暂时不可用,通常是目标服务器过载或维护。
常见原因和排查方法:
- 目标服务器问题:你访问的网站或API服务器挂了,检查目标网站是否能正常访问
- 请求频率过高:服务器限制了请求频率,添加延迟或使用代理
- User-Agent被限制:有些网站会屏蔽Python的默认User-Agent
试试这个改进的代码:
import urllib.request
import time
import random
def safe_request(url, max_retries=3):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
for attempt in range(max_retries):
try:
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
return response.read()
except urllib.error.HTTPError as e:
if e.code == 503:
print(f"第{attempt+1}次尝试失败: 503错误")
if attempt < max_retries - 1:
# 指数退避等待
wait_time = (2 ** attempt) + random.uniform(0, 1)
time.sleep(wait_time)
continue
raise e
except Exception as e:
raise e
raise Exception(f"请求失败,已重试{max_retries}次")
# 使用示例
try:
data = safe_request("http://example.com")
print("请求成功")
except Exception as e:
print(f"最终失败: {e}")
本地能跑服务器不行,可能是网络环境不同,检查服务器到目标地址的网络连接。
总结:503是服务器问题,加重试机制和伪装头试试。
能说清楚点吗,docker 和服务器有什么区别吗,对了我是放在国外的 vps 上跑有问题
我有点晕了 你究竟是把网站放到服务器上面还是把爬虫放到服务器上面?
网站放服务器上了,里面有段爬网页的代码
这个 503 是你自己的服务报的还是远程主机返回的
远程主机报的错误,爬页面的时候报错了,上面是爬页面的代码
又要沉了,真心想不到什么原因😭
本机->代理->爬取页 √
服务器->代理->爬取页 ×
检查过服务器到代理是否可行?代理是否如期成功?
不加代理本机也是可以,服务器不行。在服务器上 telnet 代理 ip 和端口是通的


