第一题地址
抓取所有(5页)机票的价格,并计算所有机票价格的平均值
,填入答案。
进入网站,惯例先开F12康康
这里被 debugger 卡住了;
你可以 选中行号点右键点 Edit breakpoint
输入 Conditional breakpoints=true,然后点回车,刷新下
如果你比较懒,你也可以在行号点右键,
点击 Add conditional breapoint 输入false,然后点回车,刷新下
但是如果你跟我一样懒的话,我们直接点 Never pause here 就行
点击 Network ,康康接口参数,只有一个参数m,长成这样应该是被加密了;
刷新下,发现m一直在变,但后面有一串乱码变化不大;
用 Chrome 自带的 视图解析 功能解析下url:视图解码后发现是 | 后面跟着一串数值,每次刷新都在小幅上涨,盲猜应该是时间。
也就是说只要解开m的构造逻辑,我们就可以开始爬数据了;
既然知道 m 是唯一的请求参数,那就好办了。
先直接在源码里简单搜索下,看看有没有思路。
点击 Elements 跳到页面的源码页,ctrl + f 唤醒搜索框,直接搜索 m=
Bingo!一发入魂,我们来看看找到了什么
一个名为 oo0O0 的方法,看起来这个命名不是特别规范;不管他我们之间看变量 m
var m = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=",
window.url = "/api/match/1";
这不是我们的 url 吗?我们找到 m 确认下
var m = oo0O0(timestamp.toString()) + window.f;
没错,这就是我们要找到那个 m ,oo0O0 这个函数我们刚刚也见过;在浏览器看太伤眼了;我们这两个js脚本考出来美化下;
w();
dd();
function oo0O0(mw) {
window.b = "";
for (var i = 0, len = window.a.length; i < len; i++) {
console.log(window.a[i]);
window.b += String[document.e + document.g](
window.a[i][document.f + document.h]() - i - window.c
);
}
var U = ["W5r5W6VdIHZcT8kU", "WQ8CWRaxWQirAW=="];
var J = function (o, E) {
o = o - 0x0;
var N = U[o];
if (J["bSSGte"] === undefined) {
var Y = function (w) {
var m =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=",
T = String(w)["replace"](/=+$/, "");
var A = "";
for (
var C = 0x0, b, W, l = 0x0;
(W = T["charAt"](l++));
~W && ((b = C % 0x4 ? b * 0x40 + W : W), C++ % 0x4)
? (A += String["fromCharCode"](0xff & (b >> ((-0x2 * C) & 0x6))))
: 0x0
) {
W = m["indexOf"](W);
}
return A;
};
var t = function (w, m) {
var T = [],
A = 0x0,
C,
b = "",
W = "";
w = Y(w);
for (var R = 0x0, v = w["length"]; R < v; R++) {
W +=
"%" + ("00" + w["charCodeAt"](R)["toString"](0x10))["slice"](-0x2);
}
w = decodeURIComponent(W);
var l;
for (l = 0x0; l < 0x100; l++) {
T[l] = l;
}
for (l = 0x0; l < 0x100; l++) {
(A = (A + T[l] + m["charCodeAt"](l % m["length"])) % 0x100),
(C = T[l]),
(T[l] = T[A]),
(T[A] = C);
}
(l = 0x0), (A = 0x0);
for (var L = 0x0; L < w["length"]; L++) {
(l = (l + 0x1) % 0x100),
(A = (A + T[l]) % 0x100),
(C = T[l]),
(T[l] = T[A]),
(T[A] = C),
(b += String["fromCharCode"](
w["charCodeAt"](L) ^ T[(T[l] + T[A]) % 0x100]
));
}
return b;
};
(J["luAabU"] = t), (J["qlVPZg"] = {
}), (J["bSSGte"] = !![]);
}
var H = J["qlVPZg"][o];
return (
H === undefined
? (J["TUDBIJ"] === undefined && (J["TUDBIJ"] = !![]),
(N = J["luAabU"](N, E)),
(J["qlVPZg"][o] = N))
: (N = H),
N
);
};
eval(
atob(window["b"])[J("0x0", "]dQW")](J("0x1", "GTu!"), "\x27" + mw + "\x27")
);
return "";
}
window.url = "/api/match/1";
request = function () {
var timestamp = Date.parse(new Date()) + 100000000;
var m = oo0O0(timestamp.toString()) + window.f;
var list = {
page: window.page, m: m + "丨" + timestamp / 1000 };
$.ajax({
url: window.url,
dataType: "json",
async: false,
data: list,
type: "GET",
beforeSend: function (request) {
},
success: function (data) {
data = data.data;
let html = "";
let us_sign = `中国联合航空KN5911波音737(中)13:50
大兴国际机场
3小时40分钟17:30
宝安机场
¥price_sole
收起
`;
let choice = [
"中国南方航空",
"吉祥航空",
"奥凯航空",
"九元航空",
"长龙航空",
"东方航空",
"中国国际航空",
"深圳航空",
"海南航空",
"春秋航空",
"上海航空",
"西部航空",
"重庆航空",
"西藏航空",
"中国联合航空",
"云南祥鹏航空",
"云南英安航空",
"厦门航空",
"天津航空",
"山东航空",
"四川航空",
"华夏航空",
"长城航空",
"成都航空有",
"北京首都航空",
"中华航空",
"意大利国家航空公司",
"印度百捷航空",
"越南航空",
"远东航空",
"印度航空公司",
"印度捷特航空有限公司",
"以色列航空公司",
"意大利航空",
"伊朗航空公司",
"印度尼西亚鹰航空公司",
"英国航空公司",
"西方天空航空",
"西捷航空",
"西班牙欧洲航空公司",
"西班牙航空公司",
"中国南方航空",
"吉祥航空",
"奥凯航空",
"九元航空",
"长龙航空",
"东方航空",
"中国国际航空",
"深圳航空",
"海南航空",
"春秋航空",
"上海航空",
"西部航空",
"重庆航空",
"西藏航空",
"中国联合航空",
"云南祥鹏航空",
"云南英安航空",
"厦门航空",
"天津航空",
"山东航空",
"四川航空",
"华夏航空",
"长城航空",
"成都航空有",
"北京首都航空",
"中华航空",
"意大利国家航空公司",
"印度百捷航空",
"越南航空",
"远东航空",
"印度航空公司",
"印度捷特航空有限公司",
"以色列航空公司",
"意大利航空",
"伊朗航空公司",
"印度尼西亚鹰航空公司",
"英国航空公司",
"西方天空航空",
"西捷航空",
"西班牙欧洲航空公司",
"西班牙航空公司",
];
let op = 1;
let jic = [
"北京首都国际机场",
"上海虹桥国际机场",
"上海浦东国际机场",
"天津滨海国际机场",
"太原武宿机场",
"呼和浩特白塔机场",
"沈阳桃仙国际机场",
"大连周水子国际机场",
"长春大房身机场",
"哈尔滨阎家岗国际机场",
"齐齐哈尔三家子机场",
"佳木斯东郊机场",
"厦门高崎国际机场",
"福州长乐国际机场",
"杭州萧山国际机场",
"合肥骆岗机场",
"宁波栎社机场",
"南京禄口国际机场",
"广州白云国际机场",
"深圳宝安国际机场",
"长沙黄花机场",
"海口美亚机场",
"武汉天河机场",
"济南遥墙机场",
"青岛流亭机场",
"南宁吴墟机场",
"三亚凤凰国际机场",
"重庆江北国际机场",
"成都双流国际机场",
"昆明巫家坝国际机场",
"昆明长水国际机场",
"桂林两江国际机场",
"西安咸阳国际机场",
"兰州中川机场",
"贵阳龙洞堡机场",
"拉萨贡嘎机场",
"乌鲁木齐地窝堡机场",
"南昌向塘机场",
"郑州新郑机场",
"北京首都国际机场",
"上海虹桥国际机场",
"上海浦东国际机场",
"天津滨海国际机场",
"太原武宿机场",
"呼和浩特白塔机场",
"沈阳桃仙国际机场",
"大连周水子国际机场",
"长春大房身机场",
"哈尔滨阎家岗国际机场",
"齐齐哈尔三家子机场",
"佳木斯东郊机场",
"厦门高崎国际机场",
"福州长乐国际机场",
"杭州萧山国际机场",
"合肥骆岗机场",
"宁波栎社机场",
"南京禄口国际机场",
"广州白云国际机场",
"深圳宝安国际机场",
"长沙黄花机场",
"海口美亚机场",
"武汉天河机场",
"济南遥墙机场",
"青岛流亭机场",
"南宁吴墟机场",
"三亚凤凰国际机场",
"重庆江北国际机场",
"成都双流国际机场",
"昆明巫家坝国际机场",
"昆明长水国际机场",
"桂林两江国际机场",
"西安咸阳国际机场",
"兰州中川机场",
"贵阳龙洞堡机场",