火车采集器软件交流官方论坛

 找回密码
 加入会员
搜索
火车采集器V9版免费下载火车浏览器 - 可视采集,万能群发,全自动脚本工具
查看: 46874|回复: 67

post分页的通用的采集方法(包含特殊类型post分页)

[复制链接]
发表于 2011-11-16 14:30:33 | 显示全部楼层 |阅读模式
本帖最后由 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

翻页相关:
翻页函数:
  1. function __doPostBack(eventTarget, eventArgument) {
  2.                 var theform;
  3.                 if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
  4.                         theform = document.Form1;
  5.                 }
  6.                 else {
  7.                         theform = document.forms["Form1"];
  8.                 }
  9.                 theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
  10.                 theform.__EVENTARGUMENT.value = eventArgument;
  11.                 theform.submit();
  12.         }
复制代码
页码区域:
  1.         <a id="LinkButton4" href="javascript:__doPostBack('LinkButton4','')">尾页</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  2. <select name="DropDownList1" onchange="__doPostBack('DropDownList1','')"
复制代码

二:具有周期性的post分页:


示例站:80s手机电影网(以前是,现在不是了)  顺德房产网       地址:http://house.shunde.net.cn/sellhouse.aspx

翻页相关:
  1. <a href="javascript:__doPostBack('dgMain$ctl28$ctl02','')" style="font-size:9pt;text-decoration:none;">[3]</a>&nbsp;<a href="javascript:__doPostBack('dgMain$ctl28$ctl03','')" style="font-size:9pt;text-decoration:none;">[4]</a>&
复制代码
翻页函数:
  1. var theForm = document.forms['form1'];
  2. if (!theForm) {
  3.     theForm = document.form1;
  4. }
  5. function __doPostBack(eventTarget, eventArgument) {
  6.     if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
  7.         theForm.__EVENTTARGET.value = eventTarget;
  8.         theForm.__EVENTARGUMENT.value = eventArgument;
  9.         theForm.submit();
  10.     }
  11. }
复制代码
这个网站post数据中页码部分是有周期性,10页一循环,以前我用接口做的,其实不用接口,只有把那个分页部分作为post随机值获取就可以了,火车头可以完成,这依赖于那个当前页码被红色的样式标记的结果,因此能够通过这个红色样式取到下一页的分页值
例如
  1. :<font color=red>第1页</font></span>&nbsp;<a href="javascript:__doPostBack('dgMain$ctl28$ctl01','')"
复制代码
设置成随机值:
前字符串:<font color=red>第(*)页</font></span>&nbsp;<a href="javascript:__doPostBack('dgMain$ctl28$ctl
后字符串:'

取得结果:01

这个确实不需要接口






三.这个是超过上面2类的页码多变化,火车采集器无法定位随机值截取前后字符串的post分页

示例:维普期刊资源整合服务平台  地址:http://lib.cqvip.com/ZK/search.a ... 8%29&M=&P=1

页码部分:
  1. <div class="pages">页数:1 <a href='javascript:ScrollPage(2,20,0);'>2</a> <a href='javascript:ScrollPage(3,20,0);'>3</a> code]

  2. 翻页函数:
  3. [code]function ScrollPage(page,cursor,lc)

  4. {



  5.         document.DownForm.P.value=page;

  6.         document.DownForm.CC.value=cursor;

  7.         document.DownForm.LC.value=lc;

  8.         document.DownForm.action="/ZK/search.aspx";

  9.         document.DownForm.target="_self";

  10.         document.DownForm.submit();

  11. }
复制代码
这个ScrollPage(page,cursor,lc),page递增,cursor   lc 无规律或者说无法设置规律,所以设想设置它们为随机值,无法定位前后字符,火车采集器也不能了

这个写接口可以实现,接口可以通过设置这样的前后字符串实现获取下一页的随机值:
例子:
  1. 2 <a href='javascript:ScrollPage(3,40,20)
复制代码
获取cursor:
前字符串:
  1. <a href='javascript:ScrollPage(【当前页码】,
复制代码
后字符串:
  1. ,
复制代码
上例:【当前页码】=3     ,得到cursor=40


获取lc:
前字符串:
  1. <a href='javascript:ScrollPage(【当前页码】, 【通配符】,
复制代码
后字符串:
  1. )
复制代码
上例:【当前页码】=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
发表于 2011-11-18 11:44:33 | 显示全部楼层
谢谢分享                 
发表于 2011-12-21 04:02:44 | 显示全部楼层
我采集到的数据怎么到处本地TXT文件啊??
发表于 2011-12-30 15:52:00 | 显示全部楼层
很不错,谢谢分享!
发表于 2012-1-16 20:25:11 | 显示全部楼层
很不错,谢谢分享!
发表于 2012-3-31 09:57:18 | 显示全部楼层
谢谢分享想采集一个页面
发表于 2012-4-19 14:15:02 | 显示全部楼层
学习了,不错,今天进来温习一下!
发表于 2012-3-22 19:36:23 | 显示全部楼层
{:soso_e162:}{:soso_e162:}{:soso_e162:}{:soso_e162:}
匿名  发表于 2012-3-21 16:08:55
火车头好难呀,看不懂怎么用
发表于 2012-3-14 11:14:08 | 显示全部楼层
学下post分页...谢谢分享!
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

QQ|手机版|Archiver|火车采集器官方站 ( 皖ICP备06000549 )

GMT+8, 2024-11-25 10:23

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表