一、作案动机
1、 url:这个url
2、目的:拿到网页返回的地区相关新闻信息
二、踩点
1、经过踩点,看到所需数据是在网页中以json
形式存储在的,然后通过js
骚操作拼接成到html
中,其中res
就是所需数据
2、通过请求目标requestsl
或者selenium
请求应该可以拿到(我没试)
3、再找一下这段数据是咋来的,搜一下关键参数或者看一下script
中有没有ajax
请求的代码,答案是肯定的,他有。(PS:找了半天,挺难的,对于我这种小白,脑袋大😵)
三、作案工具
- python3.8 (版本不重要)
- requests
- PyExecJS
四、整活
function datalist(chufa_city, mudi_city, chufa_qu, mudi_qu) {
if (chufa_city == "") {
alert("请选择出发城市");
return;
}
global_chufa_city = chufa_city;
global_mudi_city = mudi_city;
global_chufa_qu = chufa_qu;
global_mudi_qu = mudi_qu;
if (mudi_city + mudi_qu != "") {
initHtml();
page = 2;
} else {
page++;
}
$(".loadmore-box").show();
$.ajax({
url: "./gl_V5.php",
type: "POST",
dataType: "json",
data: {
"a": "k"
},
success: function(res) {
var s = res.k + _0x240d69(res.k);
$.ajax({
url: "./gl_V5.php?back=1&chufa_city=" + chufa_city + "&mudi_city=" + mudi_city + "&chufa_qu=" + chufa_qu + "&mudi_qu=" + mudi_qu + "&page=" + page,
type: "POST",
dataType: "json",
data: {
s: s
},
success: function(res) {
if (mudi_city + mudi_qu != "") {
dealdataMudi(res);
} else {
dealdataList(res);
}
},
complete: function() {
$(".loadmore-box").hide();
}
});
}
});
}
观测一下这个网页中的js代码,先向
gl_V5.PHP
发一个post请求,然后获得res
,然后使用res.k
拼接下一个请求的参数完成请求,获得数据。
知道大体流程后,观察一下缺失的参数,有这几个chufa_city
,mudi_city
,chufa_qu
,mudi_qu
,page
,他的定义code是
global_chufa_city = chufa_city;
global_mudi_city = mudi_city;
global_chufa_qu = chufa_qu;
global_mudi_qu = mudi_qu;
控制台印一下,就是我们网页选择的几个值,下面只需要拿到s = res.k + _0x240d69(res.k);
其中的s就可搞定。
五、收手吧,阿祖
先构造第一个请求
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
}
base_url = 'http://m.bj.bendibao.com/news/gelizhengce/gl_V5.php'
response = requests.post(url=base_url, headers=headers, data={"a": "k"})
json_data = response.json()
print(json_data)
# Response: {'k': 'd9724e1eae937b79a8e4744569baae8f1611889060'}
good,good, var s = res.k + _0x240d69(res.k);
已经搞一半了,res.k已经获得了,打个断点看看_0x240d69
函数(全局搜一下也可):
打个断点调试一下,看一下每个函数的作用:
_0x504335
: d9724e1eae937b79a8e4744569baae8f1611889060 # 第一步获得的k
_0x504335
: d9724e1eae937b79a8e4744569baae8f目测将后面的时间戳截取
_0x2d1f('0xd')
:ca9d8813aa2f
_0x2d1f('0xd')
:16b79267d
_0x2d1f('0xd')
:adf5f24ca47
_0x1c605c
:_0x504335 + _0x2d1f(‘0xd’)+ _0x2d1f(‘0xd’) +_0x2d1f(‘0xd’)拼接一下即可
最后再md5一下
至于每个js函数具体逻辑都在上述所指文件里了,找到所有的js函数,堆在一起(一坨shit),代码就放在下面了。
完整代码:代码在这里