You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PythonAnywhere定时任务中urllib.request.urlretrieve执行失败求助

排查PythonAnywhere定时任务执行失败的问题

我之前也碰到过类似的PythonAnywhere定时任务踩坑情况,结合你的描述,给你几个针对性的排查方向:

1. 确认定时任务的Python版本是否正确

虽然你在脚本里加了Hashbang指定Python3.6,但PythonAnywhere的定时任务调度器可能不会自动识别这个规则。你需要在定时任务的设置里明确指定Python3.6的完整路径,比如:

/usr/bin/python3.6 /home/laiAdmin/Scripts/FullAutoSubStats.py

定时任务的环境变量和你手动运行的控制台环境是完全分开的,直接写脚本名可能会调用系统默认的Python版本,导致依赖库不兼容。

2. 检查文件路径是否使用绝对路径

如果脚本里下载文件后用的是相对路径保存(比如open('output.csv', 'wb')),手动运行时脚本的工作目录是/home/laiAdmin/Scripts/,但定时任务的默认工作目录是你的主目录/home/laiAdmin/,这会导致要么找不到路径,要么没有写入权限。

解决办法是把所有文件路径改成绝对路径,比如:

save_path = '/home/laiAdmin/Scripts/downloaded_file.txt'
with open(save_path, 'wb') as f:
    f.write(response.read())

3. 给urllib请求添加自定义请求头

有些网站会拦截默认的Python请求头(比如urllib/3.6这类标识),返回403或连接失败。手动运行时可能因为控制台的环境有代理或默认请求头不同而正常,但定时任务里就会触发拦截。你可以给请求加上模拟浏览器的请求头:

from urllib.request import Request, urlopen

url = "你的目标URL"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
req = Request(url, headers=headers)
with urlopen(req) as response:
    # 处理下载内容

4. 查看完整的Traceback错误信息

你只贴了报错的开头,完整的错误信息(比如是URLError: Connection refused还是HTTPError: 403 Forbidden)能帮你更快定位问题。你可以在PythonAnywhere的定时任务日志里找到完整的报错内容,根据具体错误再针对性解决。

5. 检查网络访问权限

PythonAnywhere的定时任务环境和控制台的网络策略基本一致,但如果你的目标URL是内网地址或者需要特定代理,定时任务可能无法访问。如果是这种情况,你需要在脚本里手动配置代理(如果允许的话):

import urllib.request

proxy_handler = urllib.request.ProxyHandler({'http': 'http://proxy.example.com:8080'})
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

# 之后正常发起请求

先从版本和路径这两个最常见的问题排查,应该能解决大部分情况。

内容的提问来源于stack exchange,提问作者Max Bamberger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:18:41