|
本帖最后由 zhouchanglin 于 2013-1-2 14:13 编辑
做过很多的post分页网站,遇到的种类也有些,总体上列表post分页种类很少,大致的种类:1.__doPostBack('LinkButton1','')
2.函数控制提交表单;所以post分页其实是提交表单获取数据的方式,因此,在做post分页时,关键的2点:1.翻页函数 2.提交的表单,通过翻页函数分析表单字段的代表意义,字段含义往往通过它的英文命名可以大致了解,这样是理解性的做post分页,需要点js知识;通过抓包工具获取post数据,快捷方便,是做post分页的最好选择,但若想快速选取随机部分,判定页码字段,先分析下源码里的翻页js函数,会事半功倍,而不是去多次抓包,比较不同,找规律去判定这些
我挑选了3个具有代表性的post分页网站,代表3个post分页种类
一:最常见普遍的post分页网站 :365前程网
地址:http://www.365future.com/Search/SearchNews.aspx?typeid=299
翻页相关:
翻页函数:- function __doPostBack(eventTarget, eventArgument) {
- var theform;
- if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
- theform = document.Form1;
- }
- else {
- theform = document.forms["Form1"];
- }
- theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
- theform.__EVENTARGUMENT.value = eventArgument;
- theform.submit();
- }
复制代码 页码区域:- <a id="LinkButton4" href="javascript:__doPostBack('LinkButton4','')">尾页</a>
- <select name="DropDownList1" onchange="__doPostBack('DropDownList1','')"
复制代码
二:具有周期性的post分页:
示例站:80s手机电影网(以前是,现在不是了) 顺德房产网 地址:http://house.shunde.net.cn/sellhouse.aspx
翻页相关:- <a href="javascript:__doPostBack('dgMain$ctl28$ctl02','')" style="font-size:9pt;text-decoration:none;">[3]</a> <a href="javascript:__doPostBack('dgMain$ctl28$ctl03','')" style="font-size:9pt;text-decoration:none;">[4]</a>&
复制代码 翻页函数:- var theForm = document.forms['form1'];
- if (!theForm) {
- theForm = document.form1;
- }
- function __doPostBack(eventTarget, eventArgument) {
- if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
- theForm.__EVENTTARGET.value = eventTarget;
- theForm.__EVENTARGUMENT.value = eventArgument;
- theForm.submit();
- }
- }
复制代码 这个网站post数据中页码部分是有周期性,10页一循环,以前我用接口做的,其实不用接口,只有把那个分页部分作为post随机值获取就可以了,火车头可以完成,这依赖于那个当前页码被红色的样式标记的结果,因此能够通过这个红色样式取到下一页的分页值
例如- :<font color=red>第1页</font></span> <a href="javascript:__doPostBack('dgMain$ctl28$ctl01','')"
复制代码 设置成随机值:
前字符串:<font color=red>第(*)页</font></span> <a href="javascript:__doPostBack('dgMain$ctl28$ctl
后字符串:'
取得结果:01
这个确实不需要接口
三.这个是超过上面2类的页码多变化,火车采集器无法定位随机值截取前后字符串的post分页
示例:维普期刊资源整合服务平台 地址:http://lib.cqvip.com/ZK/search.a ... 8%29&M=&P=1
页码部分:- <div class="pages">页数:1 <a href='javascript:ScrollPage(2,20,0);'>2</a> <a href='javascript:ScrollPage(3,20,0);'>3</a> code]
- 翻页函数:
- [code]function ScrollPage(page,cursor,lc)
- {
- document.DownForm.P.value=page;
- document.DownForm.CC.value=cursor;
- document.DownForm.LC.value=lc;
- document.DownForm.action="/ZK/search.aspx";
- document.DownForm.target="_self";
- document.DownForm.submit();
- }
复制代码 这个ScrollPage(page,cursor,lc),page递增,cursor lc 无规律或者说无法设置规律,所以设想设置它们为随机值,无法定位前后字符,火车采集器也不能了
这个写接口可以实现,接口可以通过设置这样的前后字符串实现获取下一页的随机值:
例子:- 2 <a href='javascript:ScrollPage(3,40,20)
复制代码 获取cursor:
前字符串:- <a href='javascript:ScrollPage(【当前页码】,
复制代码 后字符串:上例:【当前页码】=3 ,得到cursor=40
获取lc:
前字符串:- <a href='javascript:ScrollPage(【当前页码】, 【通配符】,
复制代码 后字符串:上例:【当前页码】=3 ,得到lc=20
因此只要把当前的页码作为信息传入某个随机值的前后字符串里,作为它的某个可变的信息,以实现达到跟随翻页的某些的动态的提供数据的效果,因此可以实现这部分的通用,可以实现包含这种类型分页的通用的分页处理
火车头随机值设置部分的想法:前后字符串 增加 [当前页码] 等可用于动态设置截取的设置,路第2页的获取的post随机值,可以为下页请求的各个相关的部分做铺垫,随机值并不一定用于post数据,可能会用于某个随机值的截取字符串中,目的都是一个:获得一切可以利用的信息,加以利用
火车头的随机值获取缺少和下页请求的联系,随机值在每次翻页都是各自独立的,做铺垫的好像只有上次请求的源码,作为下页获取随机值的基础
post分页是一个连贯的请求的过程,虽然上次的信息和下次信息大多情况无关,也有特例和可能性,连贯的循环过程往往伴随着新的初始信息的建立,新旧的交换,所以我觉得做上下请求的某些相关性有必要
参考火车头post部分,我做了通用的接口,测试可以处理以上3类post分页
部分设置的:
1.页码设置:[上页码] [当前页码] [下页码] ,随着一页页请求的过程 +1,可以为 1.随机信息截取前后字符串 2.post数据提供动态数据
2.运算表达式:页码相关区域,往往是和页码1 2 3等存在某种线性运算
我写成表达式:[运算值]=[当前页码]*5----------倍增; [运算值]=([当前页码]-1)*5+6----------递增;可以设置多个表达式,用在post数据里,用[运算1]。。。标注位置
3.随机值 截取前后字符串 可以使用 [运算值] [当前页码] [上页码] [下页码] [各个随机值信息]
4.随机值获取方式:
前后字符串
纯正则表达式(遇到了一类网页模板post过程有些变化的情况,使用纯正则表达式可以解决多种前后字符串选择的问题)
5.最后,把获得的url保存为txt,之后导入火车头采集器,就免去了采网址这步
6.对于页码非递增1的,随机值前后区域无法定位的,随机值需要正则匹配的,可以选择我的接口尝试采集,不确定一定可以
以上是我的一些理解,也提出了自己的某些想法
我会在帖子后说明接口测试的那3个网站的的情况
路有类似网站采集需要,可以联系我,尽可能帮助寻找解决途径
post通用分页接口: 可下载本示例,接口也在里面 xml可做参考的配置,其他的做个类似格式的xml即可;
ps:
本人制作火车头规则 模块 接口,价格公道。
联系QQ:,好友请注明:采集。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?加入会员
x
|