新闻详情

新闻详情

首页 / 资讯中心 / 详情

告别网页抓取:Fli如何逆向Google Flights API实现零爬虫机票搜索

发布时间:2026/9/29 21:37:25来源:尧图网络
告别网页抓取:Fli如何逆向Google Flights API实现零爬虫机票搜索
告别网页抓取Fli如何逆向Google Flights API实现零爬虫机票搜索【免费下载链接】fliGoogle Flights MCP, CLI and Python Library项目地址: https://gitcode.com/gh_mirrors/fli2/fliFli是一个 Google Flights MCP、CLI 与 Python 库三合一的机票搜索工具它通过逆向工程直接对接 Google Flights API实现零爬虫、零 HTML 解析的航班搜索——不启动浏览器、不抓取网页只需一个标准 HTTP 请求就能拿到结构化机票数据。本文带你拆解它的逆向原理并用 30 秒跑通第一个搜索。为什么网页抓取该退役了做过机票抓取的朋友都有切身体会脆弱Google 换个 CSS 类名、调个 DOM 结构XPath 选择器就集体失效笨重浏览器自动化方案要维护一堆无头浏览器进程慢且占内存低效解析大段 HTML 只为了抠出几个价格字段Fli 的思路完全不同——既然 Google Flights 网页本身就是从内部 API 渲染出来的那直接逆向出这个 API 的通信协议绕开整个页面去说话。Fli 零爬虫机票搜索的 4 步逆向原理 ️整个传输层只有几百行代码集中在 fli/search/ 目录下流程清晰可复现第 1 步逆向tfsprotobuf 参数Google Flights 搜索页的 URL 长这样https://www.google.com/trights?tfs一串base64。这个tfs是一个 protobuf 二进制编码里面装着行程类型、出发/到达机场、日期、舱位、乘客、中转偏好等全部搜索条件。Fli 用仅 60 行的最小白板协议编码器fli/search/_proto.py手工实现了 varint 和 length-delimited 字段编码把搜索条件序列化成tfs值——完全不需要 protobuf 运行时依赖。第 2 步拼接搜索页 URLfli/search/_tfs.py 中的build_tfs()把过滤器对象编码成tfs参数page_url()再拼上语言hl、国家gl、货币curr等本地化参数。第 3 步从页面中抽取ds:1数据块Google 的搜索页把完整结果内联在一段AF_initDataCallback({key: ds:1, ..., data:[...]})的 JavaScript 回调里。extract_payload()用正则精准定位这个数据块并反序列化成 JSON——这一步拿到的是和内部 RPC 完全相同的结果结构。第 4 步解码为类型化模型fli/search/_decoders.py 按逆向出的字段位置图行内[2]、[3]是航班列表价格、航段、中转、排放值各在固定下标把原始 JSON 解码成FlightResult这类结构清晰的对象业务代码从此不用碰任何下标魔法。为什么要走搜索页而不是 RPC2026-08 起Google 给FlightsFrontendService的 RPC 接口加上了只有页面自身 JavaScript 才能生成的x-goog-batchexecute-bgr签名头普通 HTTP 客户端一律拿到空响应。而公开搜索页没有这道门——结果同样内联在页面里只是换了tfs参数格式。Fli 顺势切换到这条通道保持了纯 HTTP 的轻量架构。30 秒上手安装与第一次搜索 ⚡零爬虫架构意味着零额外依赖一条命令安装pip install flightsCLI 一行命令搜索 JFK 到伦敦的商务舱直飞航班fli flights JFK LHR 2026-10-25 --class BUSINESS --stops NON_STOP想找最便宜的出行日期fli dates JFK LHR --from 2026-01-01 --to 2026-02-01即可在日期区间里扫描票价。Python 库同样简洁核心模型定义在 fli/models/from fli.models import Airport, FlightSearchFilters, FlightSegment, PassengerInfo, SeatType from fli.search import SearchFlights filters FlightSearchFilters( passenger_infoPassengerInfo(adults1), flight_segments[FlightSegment( departure_airport[[Airport.JFK, 0]], arrival_airport[[Airport.LAX, 0]], travel_date2026-12-25, )], seat_typeSeatType.ECONOMY, ) for f in SearchFlights().search(filters) or []: print(f${f.price} — {f.duration} 分钟 — {f.stops} 次中转)MCP Server让 AI 助手一句话查机票 Fli 内置了基于 FastMCP 的 MCP 服务器fli/mcp/server.py把search_flights指定日期搜索和search_dates区间找最低价两个工具暴露给 AI 客户端fli-mcp # STDIO 模式供 Claude Desktop 等客户端使用 fli-mcp-http # HTTP 模式默认服务在 127.0.0.1:8000/mcp/在 Claude Desktop 配置里登记fli-mcp后直接用自然语言提问即可“帮我查 12 月 25 日从纽约 JFK 到洛杉矶的非直飞航班”——AI 会通过 MCP 协议调用底层同一个零爬虫搜索通道。完整配置见 docs/guides/mcp.md。内置防护限流、重试与错误分类 ️逆向接口最怕打崩服务方fli/search/client.py 内置了三重保护机制实现全局限流令牌桶算法所有线程共享 10 请求/秒预算自动重试指数退避最多 3 次瞬时空页面约 1/60 概率单独再试类型化错误超时、连接、证书、HTTP、解析失败各自独立异常类错误信息直接给出修复建议实用边界这些限制要知道 多城市行程结果由 Google 客户端侧通过受限 RPC 加载页面内联不出数据需分段搜索日期扫描每天消耗一次页面抓取单次最多 93 天三个过滤器emissions、bags、exclude_basic_economy无tfs字段会被丢弃并给出警告更多示例可运行 examples/python/basic_one_way_search.pyTypeScript 移植版在 fli-js/关键源码地图 模块职责fli/search/_proto.py极简 protobuf 编码器生成tfs令牌fli/search/_tfs.py搜索页传输层构建 URL、抽取ds:1、客户端过滤fli/search/_decoders.py把原始 JSON 解码为类型化航班模型fli/search/_wire.py线格式分块与协议帧处理fli/search/client.py限流、重试、浏览器指纹模拟的 HTTP 客户端fli/models/机场、航司枚举与搜索过滤器模型fli/cli/命令行入口fli/fli-mcp总结Fli 证明了逆向工程不需要重型武器逆向一个tfsprotobuf 参数 一段页面内联数据就能用纯 HTTP打通 Google Flights API比爬虫方案更快、更稳、更抗 UI 变动。无论你想要 CLI 一行查询、Python 库深度定制还是让 AI 助手直接查机票这套零爬虫架构都能直接复用。【免费下载链接】fliGoogle Flights MCP, CLI and Python Library项目地址: https://gitcode.com/gh_mirrors/fli2/fli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Markdown 编辑器选型与高效写作工作流:从语法到导出的完整指南 2026/9/29 22:18:00

Markdown 编辑器选型与高效写作工作流:从语法到导出的完整指南

如果用一句话概括我这几年写东西的习惯,那就是:能 Markdown 就绝不用 Word。方案、周报、读书笔记、公众号草稿、技术文档,甚至毕业论文的初稿,我都是在 Markdown 编辑器里写完,再按需导出成 PDF 或 Word。最开始只是嫌…

阅读更多 →
共享凭据紧急熔断与一键夺权:企业密码管理器(安当SYP)在突发安全事件中的秒级冻结实践 2026/9/29 22:18:00

共享凭据紧急熔断与一键夺权:企业密码管理器(安当SYP)在突发安全事件中的秒级冻结实践

一、为什么特权共享凭据必须能"秒级熔断" 在很多企业的真实环境里,"共享账号"不是例外,而是常态。财务共用一个网银操作员号,供应链审核组共用一个采购平台账号,车企研发外包团队共用一台跳板机的域账号&…

阅读更多 →
自然语言驱动Blender建模,Antigravity+MCP快速构建智慧仓储数字孪生场景 2026/9/29 22:17:59

自然语言驱动Blender建模,Antigravity+MCP快速构建智慧仓储数字孪生场景

先说个可能有点反直觉的结论:一套看起来很唬人的智慧仓储数字孪生场景,最耗时间的往往不是渲染,不是动画,而是最基础的那批3D资产建模和场景装配。传统做法里,建模师照着平面图一点点拉墙、摆货架、布库位,…

阅读更多 →
牛客笔试会录屏吗?判定吃的是每 30 到 40 秒一张的截图 2026/9/29 22:17:26

牛客笔试会录屏吗?判定吃的是每 30 到 40 秒一张的截图

先交代位置。我们在做面试和笔试的实时辅助工具,这两年拆了不少考试端的前端和客户端,也一直在拿各家助手那句「完全隐身」去对照实测。下面写的是拆出来和查到的结果,落点只有一个:对方那一侧到底在采什么。 这篇讲在线笔试&…

阅读更多 →
国产codex技术研发进展与应用场景全景解析 2026/9/29 22:17:20

国产codex技术研发进展与应用场景全景解析

科研路上最浪费时间的不是实验失败,而是“工具焦虑”——下载一堆软件,用到一半弃坑,效率反而更低。这篇只挑4款真正高频、互补的工具,第一个重磅拆解切问学术(文献全链路救星),其余三款覆盖管理…

阅读更多 →
179、MLIR的Profiling(性能分析)与Timing(计时)Pass 2026/9/29 22:17:20

179、MLIR的Profiling(性能分析)与Timing(计时)Pass

MLIR的Profiling(性能分析)与Timing(计时)Pass 上周帮团队调一个AI推理引擎的算子性能问题,模型跑在自研NPU上,某个卷积算子的延迟比预期高了3倍。常规手段——插桩、打印时间戳、甚至用perf去抓——都试了,结果发现瓶颈不在计算本身,而在MLIR编译后的IR调度上。那个调…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉