如何将Python定期下载文件的脚本迁移到无Chrome的虚拟服务器运行
无GUI服务器端文件下载实现方案
原有逻辑依赖本地Chrome浏览器处理HTTP请求和文件写入,无GUI的虚拟服务器不需要安装浏览器,直接使用Python的HTTP请求库模拟浏览器请求即可实现相同的下载效果,具体实现步骤如下:
1. 安装依赖库
使用requests库替代浏览器完成请求发送和文件接收,执行以下命令安装:pip install requests
如果服务器使用Python3,可替换为pip3 install requests
2. 核心实现代码
import requests import os # 下载目标链接 url = 'https://www.djppr.kemenkeu.go.id/page/loadViewer?idViewer=9369&action=download' # 自定义服务器端文件保存路径 save_dir = './djppr_download' # 自动创建保存目录,目录已存在时不会报错 os.makedirs(save_dir, exist_ok=True) # 可根据实际下载的文件类型修改后缀名,该链接默认下载为PDF文件 save_path = os.path.join(save_dir, 'djppr_file.pdf') # 模拟浏览器请求头,避免被网站反爬策略拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } try: # 发送GET请求,stream=True适配大文件下载,避免内存溢出 response = requests.get(url, headers=headers, stream=True, timeout=30) # 校验请求是否成功,状态码非200会抛出异常 response.raise_for_status() # 流式写入本地文件 with open(save_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) print(f"下载成功,文件保存路径:{save_path}") except Exception as e: print(f"下载失败,错误信息:{str(e)}")
3. 配套配置与异常处理
- 定期执行可使用Linux服务器的crontab定时任务,例如配置每天凌晨1点执行脚本,添加规则:
0 1 * * * /usr/bin/python3 /your/script/path/download.py >> /your/log/path/download.log 2>&1 - 若遇到SSL证书校验错误,可在
requests.get参数中添加verify=False跳过校验,仅建议对信任的目标网站使用该配置 - 若后续网站需要登录权限才能下载,可从浏览器中获取登录后的Cookie值,添加到headers参数中即可
- 若下载后文件无法打开,可先在本地浏览器下载一次原文件确认实际格式,修改代码中保存文件的后缀名即可
内容的提问来源于stack exchange,提问作者absk
相关产品推荐
相关产品推荐

