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

点击网页按钮触发Heroku/DG Ocean上Python脚本运行方案咨询

结论

这个需求完全可以实现,Heroku和DigitalOcean(DO)Droplet两个平台都能支撑,从实现便捷度维度优先选DO Droplet,下面是具体实现方案、两个平台的适配差异,以及特殊场景下的替代方案。

核心实现逻辑

本质是把Python爬虫封装成可公网访问的HTTP接口,自有网页的按钮绑定前端点击事件,用户点击时向接口发起请求,服务端收到请求后触发爬虫运行,任务完成后将爬取结果返回给前端渲染展示即可。
最简落地流程:

  • 用Flask/FastAPI这类轻量Python Web框架给现有爬虫代码套一层HTTP服务,单独写一个POST接口对应爬虫触发逻辑
  • 将封装好的Web服务部署到选定平台,拿到公网可访问的接口地址
  • 给自有网页的爬虫按钮绑定JS事件,点击时向接口发起请求,拿到返回结果后渲染到页面对应位置
两个平台部署对比

DigitalOcean Droplet

实现成本最低,无额外平台规则限制:

  • 你拿到的是拥有完整root权限的云服务器,安装Python环境、爬虫依赖(包括浏览器驱动、反爬相关组件)后,把Web服务跑起来,配置好端口放行、systemd/supervisor进程守护保证服务后台常驻,就能直接对外提供服务,没有运行时长、文件存储的额外限制。
  • 安全注意点:必须给接口加简单鉴权(比如校验请求头里的自定义密钥),避免接口被公网恶意扫描调用,耗光服务器资源。
  • 最简Flask封装示例:
from flask import Flask, jsonify, request
app = Flask(__name__)
# 自定义鉴权密钥,前端请求时需要携带对应值
AUTH_KEY = "替换为你自己生成的随机字符串"

# 导入你已经写好的爬虫执行函数
from your_spider_file import run_spider

@app.route("/trigger-crawl", methods=["POST"])
def crawl_endpoint():
    # 鉴权校验
    if request.headers.get("X-Auth-Key") != AUTH_KEY:
        return jsonify({"code": 403, "msg": "非法请求"}), 403
    try:
        crawl_result = run_spider()
        return jsonify({"code": 200, "data": crawl_result})
    except Exception as e:
        return jsonify({"code": 500, "msg": f"爬取异常: {str(e)}"}), 500

if __name__ == "__main__":
    # 生产环境不要直接用Flask自带开发服务器,换成gunicorn部署即可
    app.run(host="0.0.0.0", port=8000)
  • 前端按钮绑定的最简JS逻辑示例:
const crawlBtn = document.querySelector("#crawlTriggerBtn")
crawlBtn.addEventListener("click", async () => {
    try {
        const response = await fetch("替换为你的服务器接口地址/trigger-crawl", {
            method: "POST",
            headers: {
                "X-Auth-Key": "替换为你之前设置的鉴权密钥"
            }
        })
        const resData = await response.json()
        if (resData.code === 200) {
            // 将resData.data渲染到页面结果展示区域即可
            console.log("爬取完成", resData.data)
        }
    } catch (err) {
        console.error("请求失败", err)
    }
})

Heroku

实现便捷度稍差,存在几个平台固有约束,适配不好很容易出问题:

  • 免费/低配置实例存在休眠机制,长时间没有请求会进入休眠状态,第一次触发时需要等待几十秒冷启动,用户体验差
  • 实例本地文件系统是临时存储,爬虫运行过程中生成的临时文件会在实例重启、重新部署后全部丢失
  • 普通Web实例单次请求有30秒超时限制,如果你的爬虫单次运行时长超过30秒,同步等待结果的逻辑会被平台强制中断,需要额外接入Celery+Redis这类异步任务队列,改造为“接口先返回任务提交成功、后台异步跑爬虫、前端轮询/websocket拿结果”的逻辑,部署复杂度会明显上升
  • 唯一优势是不需要手动配置服务器环境,按照Heroku的规范提交代码即可自动完成部署,仅适合单次爬取时长在10秒以内的轻量爬虫场景。
特殊场景替代方案

如果你的爬虫单次运行时长超过1分钟,不管选哪个平台都不建议用同步接口阻塞等待结果的逻辑,统一改成异步任务模式更稳妥:接口收到请求后立刻给前端返回任务已提交的响应,后台单独调度爬虫任务,前端通过定时轮询或者WebSocket长连接,等爬虫跑完后再接收结果展示。
如果不想自己维护云服务器,也可以用Serverless函数服务封装爬虫逻辑,按实际调用次数付费,不需要常驻服务进程,注意提前确认对应平台的单次函数运行时长上限即可。

重要提醒:公网暴露的爬虫接口必须加鉴权,不要裸奔,否则很容易被恶意扫描调用,产生不必要的资源消耗甚至违规请求风险。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:24:39