爬取一个ajax网站

当我看到网站的时候以为特别简单,需要爬取这个网站的企业数据。

遇到的问题,

1.点击网站栏目页以后页面URL地址不发生改变


2.打开页面源代码

搜索关键词发现没有,页面是通过ajax传递的

3.打开谷歌浏览器开发者工具

发现数据请求的真实地址

而且是POST方式传输的

4.看携带字段,发现所有的用户参数都是经过加密以后,发送给服务器的


5.如果我们不解密字段的话,就无法向服务器发送参数,服务器也就不会给我们返回数据

看看服务器给他返回的数据是什么


从下面的数据我们可以了解到,pageIndex代表的是当前页面,pages,代表的是354,records代表的是总共的数量

6.但是这是服务器返回的数据,我们需要获取到发送前的初始数据。

现在要解决的问题

整个网站都是动态ajax传输的,点击所有的页面都是http://42.123.101.210:8088/gzzhxt/这个地址

没有分页,也没有子页。

既然访问所有的页面都是一样,服务器是怎么知道我需要访问的哪个页面呢,服务器怎么知道我要访问下一页呢?

肯定通过某种方式告诉了服务器,我需要访问的是你的哪个页面,并且要访问第几页


还是这张图,所有的信息肯定是经过加密传输给服务器的,这段密钥我们该如何破解呢。

尝试着不带请求参数去请求这个网站试试

果不其然,服务器直接拒绝我们的请求

这样就获取不到信息了,怎么办。好捉急。

尝试一下使用人工模拟访问用户数据吧

果然拿到了99条数据

但是有有一个问题了,这是第一页,怎么拿到第二页,第三页的数据呢

。。。这个一共300多页,我不拿只拿第一页就看着吧

于是我们继续找规律

打开谷歌开发者工具

发现网站加载了如下几个js文件,我们去找一下这些js里面有没有相关的规律

尝试寻找了几个js,最后发现这个js最有可能

页面是通过jquery的ajax发送数据请求的,那么这里会不会有发送数据的参数呢

我们打个断点看看

先打一个断点调试一下看看

在断点里面我们看见了发送的加密数据以及发送给服务器的网址


注意一下图中的params

他会不会是没有加密之前服务器的用户信息呢,拷贝出来看看

通过分析我们知道他的携带信息有

pageIndex是当前所在的页面

pageSize是当前每页显示的商品数

sortCol现在还不知道,暂时不用管。

现在我们知道这些参数以后,只要找到加密方式,把这个数据加密以后发送给服务器,然后服务器把值返还给我们

那么到底是怎么加密的。

OK,我们继续调试

在这里发现了_opType

我们复制出来看看数据

发现了当前页面以及这个页面显示的商品数据

这里我们发现了一个疑点

数据在第6行的时候,rqParams是这样的形式,但是数据在第10行的时候

变成了加密的字符串,那这中间肯定有加密的方式,我们逐行去调试下


在尝试了一下以后我发现了这个函数

数据是经过这个函数以后变成加密的字符串的,我们去看看这个加密的函数做了什么

在经过一番查找以后

我们发现了这个函数


这个是干嘛的呢,我们去百度查询一下

发现这个是一个加密的工具,于是我们知道他是用什么加密的了

我们带入到他的代码里面看看,我们发现

uA4x6790@23_56a@就他加密的字符串

我们尝试着用他的密钥加密一下数据


----》》》》此处学习怎么使用这个函数----五分钟过去

好学会了那我们尝试一下

这是我们要加密的字段

_opType=getPageData_lt&_fromSite=1&tk=bclluK7Dze9PvZCgfSUHbjtKQDAwgHXOFBGNes8YN3g-ec/2&_lstID=enterpriseLib_Box&_xml=../../MHWeb/enterpriseLib/LstXml/enterprise_List.xml&_auvOpType=&_urlParam=&_pageIndex=11&_pageSize=99&_sortCol=0&_baseCondition=&_setPageSize=1

这是加密出来的数据

这是他后台的数据

我们拿出来对比一下,你们发现没有我的是+号显示的,而他的全部是%7BEC000%7D

那我们在继续调试一下,

看到这个,我发现他是不是把所有的+号全部都变成了{$EC000}

那我们再把+号替换一下看看

好了数据正常了



那我们模拟一下请求第五页的数据看看

我们把当前的页面数据改成第五页

然后把这个数据加密,获取这个加密的数据


我们把这个加密的数据代入到请求中看看


我们去看看网站里面的第五页最后一个数据是不是这个

好像真的是唉,好巧哦。哈哈哈其实不巧。


那现在我们已经拿到数据了,所以我们就可以写入数据库啦。

那我们就随便写入30页的数据到数据库吧

全篇结束。

你可能感兴趣的:(爬取一个ajax网站)