post分页网站中比较特殊的一类采集解决办法
本帖最后由 zhouchanglin 于 2011-5-10 22:06 编辑就是80s手机电影网(本来想做这个网的,竟打不开了)http://www.y80s.com/ 和 顺德房产网http://house.shunde.net.cn/sellhouse.aspx(我做的是这个的,80s网站打不开,分页方式是一样的),以前遇到过这样类型的post分页,可都还不能解决,现在我学了点php 的curl ,与网站建立连接的获取源码的方法,可以解决这类网站了
这类post分页与普通的不同就是在于,post数据中分页部分并不是一页页递增的,而是每10页是一栏(每一栏分页部分是递增的),到第11页要点击翻栏的按钮,可以查看它触发的函数是有些不同的,相当于上下栏按钮而不是上下页按钮,点击一下会跳到下一栏的第一页,路从第1页点这个按钮是跳到第11页,第2栏;
前1-10页是__doPostBack('dgMain$ctl28$ctl00','')-----__doPostBack('dgMain$ctl28$ctl10','')
11-20页 __doPostBack('dgMain$ctl28$ctl01','')-------------__doPostBack('dgMain$ctl28$ctl10','')路痴循环不变,并没有递增,而且$ctl00 后面00是采用补0的方式,火车头分页设置不了
还有它的 其中的...,左边...点击换到上一栏的最后一页,右边的...点击会翻到下一栏的第一页,而左...的点击函数是:__doPostBack('dgMain$ctl28$ctl00',''); 右...是:__doPostBack('dgMain$ctl28$ctl11',''),这要到第11页以后,不是前10页,我想可能是通过返回的__VIEWSTATE控件记录了当前的状态的,肯定有些东西记录了是第几页,要不服务器端怎么知道
1-10页换到第2栏是__doPostBack('dgMain$ctl28$ctl10','')
具体采集办法:本地建立php环境,可以下载wampserver一键安装包 地址:http://www.wampserver.com/en/download.php,php需要开启 curl扩展,默认关闭
然后用php脚本模拟对这个网站发送post数据,获取一页就生成为相应的html,保存在本地网站目录C:\wamp\www
php文件执行后生成的html文件:见图
执行的效果图:
处理顺德房产网分页的php文件:fenye.php放在C:\wamp\www,需要提供获取页数的参数yeshu,以get提交给fenye.php,由于这个网站总页数84页,所以我提交了84,运行的时间会很长,最终效果是达到了,生成的html是相应的分页数据
生成了每页的html 文件,这样就可以用火车头采集了,自定义组合成正确地址,html是从1.html---------84.html,这样直接采集这些html就获取了所有的内容页了
顺德房产网分页的php文件下载:,解压后把fenye.php放在C:\wamp\www(安装wampserver后的运行目录),并给其fenye.php?yeshu=84yeshu是要获取的分页数
最后得到的顺德房产网全部内容页txt:解压,可以导入火车头使用
修改:由于没有看到到最后一栏81页以后的变化,先前的到第82页以后都出错了,这是修改后的,可以正确获得82 83 84页 支持一下了,广告位不出租。 谢谢分享!学习了。 学习ing还真不好懂啊 这个不错,学习。。 看得眼花缭乱也没看明白 就是那个网站是10页一栏,翻到下一栏只能按最右的。。。,火车头无法直接post出来,只能post前10页,到下面的页,就循环前一轮的分页数字;,我那个文件分页数字处理的不是很好,还有些问题 恩 不错~!!!! {:4_185:}学习才能进步! 楼主的教程真是实用,教会我们不少东西。谢谢。
页:
[1]
2