当我看到网站的时候以为特别简单,需要爬取这个网站的企业数据。
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页的数据到数据库吧
全篇结束。