python 携程航班信息查询

本文介绍了如何使用Python查询携程航班信息。关键在于解析获取JSON中的routeList数据,并通过分析JavaScript代码得到token。通过断点调试JS,找到p.getProductToken函数,利用execjs库在Python中执行JS获取token,最终实现航班信息的查询。
摘要由CSDN通过智能技术生成
  • 查询页面
    携程链接
    在这里插入图片描述
  • 第一步找到数据怎么来的

在这里插入图片描述
发现航班信息在返回 json 的 routeList 里
在这里插入图片描述
看传递的参数
在这里插入图片描述
然后只要找到token是怎么来的就好了
在这里插入图片描述
可以确定token 是由 app.js 生成的,可以看到这个请求只调用过app.js
在这里插入图片描述
到 app.js 里去搜索,在可疑的地方打断点在这里插入图片描述
然后回到页面重新搜索航班
在这里插入图片描述
调用了p.getProductToken 函数,传递了三个参数 can bjs Oneway ,分别是出发城市 、到达城市、单程。执行下一步
在这里插入图片描述
继续执行
在这里插入图片描述
后面就不分析了,后面就把js 扣出来在工具里测试
在这里插入图片描述
成功拿到token,然后在python中用execjs 执行js 就可以拿到token,就可以发送请求查询航班。
在这里插入图片描述

gettoken.js

function a(e, t) {
   
var n = (65535 & e) + (65535 & t);
return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}

function i(e, t, n, r, i, o) {
   
return a((l = a(a(t, e), a(r, o))) << (s = i) | l >>> 32 - s, n);
var l, s
}

function o(e, t, n, r, a, o, l) {
   
return i(t & n | ~t & r, e, t, a, o, l)
}

function l(e, t, n, r, a, o, l) {
   
return i(t & r | n & ~r, e, t, a, o, l)
}

function s(e, t, n, r, a, o, l) {
   
return i(t ^ n ^ r, e, t, a, o, l)
}

function u(e, t, n, r, a, o, l) {
   
return i(n ^ (t | ~r), e, t, a, o, l)
}

function c(e, t) {
   
var n, r, i, c, f;
e[t >> 5] |= 128 << t % 32,
e[14 + (t + 64 >>> 9 << 4)] = t;
var d = 1732584193,
p = -271733879,
h = -1732584194,
m = 271733878;
for (n = 0; n < e.length; n += 16) d = o(r = d, i = p, c = h, f = m, e[n], 7, -680876936),
m = o(m, d, p, h, e[n + 1], 12, -389564586),
h = o(h, m, d, p, e[n + 2], 17, 606105819),
p = o(p, h, m, d, e[n + 3], 22, -1044525330),
d = o(d, p, h, m, e[n + 4], 7, -176418897),
m = o(m, d, p, h, e[n + 5], 12, 1200080426),
h = o(h, m, d, p, e[n + 6], 17, -1473231341),
p = o(p, h, m, d, e[n + 7], 22, -45705983),
d = o(d, p, h, m, e[n + 8], 7, 1770035416),
m = o(m, d, p, h, e[n + 9], 12, -1958414417),
h = o(h, m, d, p, e[n + 10], 17, -42063),
p = o(p, h, m, d, e[n + 11], 22, -1990404162),
d = o(d, p, h, m, e[n + 12], 7, 1804603682),
m = o(m, d, p, h, e[n + 13], 12, -40341101),
h = o(h, m, d, p, e[n + 14], 17, -1502002290),
d = l(d, p = o(p, h, m, d, e[n + 15], 22, 1236535329), h, m, e[n + 1], 5, -165796510),
m = l(m, d, p, h, e[n + 6], 9, -1069501632),
h = l(h, m, d, p, e[n + 11], 14, 643717713),
p = l(p, h, m, d, e[n], 20, -373897302),
d = l(d, p, h, m, e[n + 5], 5, -701558691),
m = l(m, d, p, h, e[n + 10], 9, 38016083),
h = l(h, m, d, p, e[n + 15], 14, -660478335),
p = l(p, h, m, d, e[n + 4], 20, -405537848),
d = l(d, p, h, m, e[n + 9], 5, 568446438),
m = l(m, d, p, h, e[n + 14], 9, -1019803690),
h = l(h, m, d, p, e[n + 3], 14, -187363961),
p = l(p, h, m, d, e[n + 8]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值