|
本帖最后由 lypying 于 2010-10-18 19:09 编辑
复杂程度:较复杂
难度系数:较高
建议阅读人群:熟练使用火车
所用技术:对JS源码分析,会使用抓包工具。
最近在采集讨论区看见个帖子 如下
http://bbs.locoy.com/spider-54812-1-3.html
采集金融界的这个站 为总结经验加换车厢特发此贴,希望大家共同分析相对复杂的采集经验 那么现在开始 打开页面
http://insurance.jrj.com.cn/acti ... a?insuranceTypeId=4
看源码
发现所要采集的列表居然没有 其实这一步就可以干掉一部分采集的朋友了 不过我发现了这段代码- <script language="javascript">
- searchProduct('', '18', obj_paras_123445);
- var ck = new HttpCookie("insurance_IPs");
- ck.setValue("");
- ck.setExpires(-1);
- ck.save();
- </script>
复制代码 一个搜寻产品的函数searchPriaduct 这个函数是JAVASCRIPT的复制函数名,查找下这个函数的位置,因为JS的函数在源代码里是可以看到的
在这个源码页搜索下居然没有。没关系,保存该网页。
用DW打开网页 查看源代码会发现好多JS文件 如图
简单的看下可以知道他的JS是用PROTOTYPE做的。找到刚才的函数searchPriaduct 复制 在各个JS页面搜索 找到该函数原型
在IPL.js文件里我们找到了函数原型,为了方便分析 我将这个函数重新的拍了下版。如图
这个只是方便阅读 下面贴出这个函数- function searchProduct(pageIndex,pageSize,paras_obj){
- var url="/action/SearchIPJson.jspa";
- var params="pageIndex="+pageIndex+"&pageSize="+pageSize+"&"+Object.toQueryString(paras_obj);
- paras_obj.pageIndex=pageIndex;
- paras_obj.pageSize=pageSize;
- var productName=paras_obj.productName;
- paras_obj.productName=encodeURI(productName);
- new Ajax.Request(url,{method:'post',parameters:paras_obj,onSuccess:
- function(request){var ps=request.responseJSON;
- makeTable(ps.items,$("ct_IPL"));
- paras_obj.productName=productName;
- pager(ps.curPage,ps.pageSize,ps.pageCount,paras_obj,$("page"));}});}
复制代码 好了 不难看出定义了变量url和params所用就是获得并处理由我们所看到源码页传递过来的参数。他传递了三个参数分别是pageIndex,pageSize,paras_obj懂点英文的人都知道这三个函数的意义,然后通过new Ajax.Request POST过去 我对JS不是很了解 但是通过字面意思可以知道,最后传递的是一个JSON数据。据我了解(可能是错误的)JSON传递的是一个数据结构,一次将所需要的结构传递过来。提交的页面是/action/SearchIPJson.jspa
以上是对源码的分析下面我们用抓包工具对该页面进行分析 对该页面进行抓包多点几次页面得到的结果如图
对比两次POST出去的值你会发现 和我们上面的代码分析是一样的 确实是向action/SearchIPJson.jspa页面提交的。仔细观察pageIndex是索引的页面,也就是当前页码。desc应该是升序 pageSize是18 一查上面的 居然是18个产品哦。真神奇 当然这个不是巧合了。我们在IE里输入提交的数据
http://insurance.jrj.com.cn/acti ... x=2&pageSize=18
居然可以下载,下载用记事本打开,这些就是我们要采集的数据 好了想要得到的数据都有了 那么怎么采集哪?
本文仅对这样的数据进行分析。由于我用的是个人版,并没有插件功能,可能插件会实现这样的功能,如果你是免费版和像我一样的个人版用户怎么办?没关系我提供个思路,用迅雷下载全部的提交页面,这个数据应该是JASON的结构 每个{},{},{}这样的结构都是所要的数据结构,那好 吧这些文件复制到一个文本文档里。后缀名改为HTML,传到你本机的IIS里。想做什么?当然用火车头0深度去抓了。只要有规律就可以抓。
那么有人会问我要采集内容页,链接里的数据怎么办?仔细观察内容页网址http://insurance.jrj.com.cn/html/ip/detail/ip_103355.shtml你会发现IP_后面有六位数,好到我们下载的文件里找找
{"bxzr":"","bzqx":"七年,十年两种","companyId":100468,"cpgzd":1003,"cptjd":1000,"id":103355,"insuranceTypeId":4,"productName":"珍珠两全保险分红型","score":0,"shortName":"中法人寿","tbnlsm":"60天--65周岁","typeName":"分红险"}
对应的"id":103355," 居然是ID值。这是巧合么?当然不是。谁能一下子蒙这么准那,这就考平时的观察。这样你可以通过多页采集,采集到内容页里的内容了。虽然麻烦点但是我相信这个思路是可以解决这个问题的。
到此这个页面的分析告一段落,如果有其他朋友有其他更好的办法解决这个采集 请跟帖大家讨论。没功劳有苦劳 希望管理员给几节车厢,赞车厢换版本目标标准版奋斗吧 哈哈 如果得到大家的认可,以后有时间我还会发出一些比较复杂的采集思路。有人会说,抓包就能分析了为什么要看源代码。知己知彼百战不殆啊
感谢大家的阅读,希望此文只是一个序幕而不是一个结束。谢谢
早上起来还在睡意的朦胧中,补充个规则 方便大家研究
规则下载
留个QQ号码 17547523 希望可以与大家交流技术 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?加入会员
x
评分
-
3
查看全部评分
-
|