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

如何从JavaScript生成的表格中提取OEBB实时公交时刻表数据

解决OEBB实时公交时刻表动态数据抓取问题

这个页面的时刻表表格是通过JavaScript动态渲染生成的,直接请求HTML只能拿到用于生成表格的JS代码,必须让浏览器执行JS后才能获取到渲染完成的表格数据。不管是本地运行脚本还是服务器运行脚本,都能解决这个问题,具体实现方案如下:

本地运行脚本方案

推荐使用Python的Playwright工具(比Selenium更轻量易用),步骤如下:

  1. 安装依赖:
    pip install playwright
    playwright install chromium
    
  2. 编写抓取脚本示例:
    from playwright.sync_api import sync_playwright
    import time
    
    def get_timetable():
        with sync_playwright() as p:
            # 本地调试可去掉headless=False,查看浏览器渲染过程
            browser = p.chromium.launch(headless=True)
            page = browser.new_page()
            page.goto("https://fahrplan.oebb.at/bin/stboard.exe/dn?L=...vs_liveticker&evaId=493034&boardType=dep&productsFilter=1011111111011&dirInput=&tickerID=dep&start=yes&eqstops=false&showJourneys=12&additionalTime=0")
            # 等待表格元素加载完成
            page.wait_for_selector("table")
            # 获取表格的HTML内容,也可直接解析为结构化数据(如JSON)
            table_content = page.locator("table").inner_html()
            # 这里可将数据保存到本地文件或数据库
            print(table_content)
            browser.close()
    
    # 每隔30秒执行一次抓取
    while True:
        get_timetable()
        time.sleep(30)
    
  3. 运行脚本:直接执行该Python文件,即可定时获取渲染后的表格数据。

服务器运行脚本方案

服务器环境需使用无头浏览器执行JS,同样可基于Playwright实现,步骤如下:

  1. 服务器环境配置(以Ubuntu为例):
    # 安装Python及依赖
    apt update && apt install python3-pip -y
    pip3 install playwright
    # 安装无头Chromium及依赖
    playwright install chromium
    
  2. 调整脚本为纯无头模式:确保browser = p.chromium.launch(headless=True),无需图形界面支持。
  3. 后台持续运行脚本:
    • 用nohup让脚本后台运行:nohup python3 your_script.py &
    • 或配置systemd服务,实现脚本崩溃自动重启,保证持续抓取。
  4. 数据存储:可将抓取到的数据保存至服务器本地文件,或上传至数据库,方便后续调用。

注意事项

  • 保持30秒的请求间隔,避免触发网站反爬机制导致IP被封禁
  • 可提前查看网站的robots.txt规则,确认抓取行为是否合规
  • 若遇到反爬拦截,可添加模拟请求头、设置代理,或加入随机延迟模拟人类操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:46:03