citybeggar
发表于 2010-12-15 07:26:17
http://www.cmt178.com/index/news/news.shtml求这个站的规则
zhouchanglin
发表于 2010-12-15 12:22:42
楼上做好了,一开始我用http://www.cmt178.com/news.do?method=newsList&number=3&type=厂商新闻请求不到数据,可能是中文要编码才行
变成http://www.cmt178.com/news.do?method=newsList&number=3&type=%E5%8E%82%E5%95%86%E6%96%B0%E9%97%BB 就行了
它是post get都可以请求,所以规则里用的是get的,你要采其他的新闻只要抓下包获取post数据就行了,这个新闻分类抓包的post数据number=3&type=%E5%8E%82%E5%95%86%E6%96%B0%E9%97%BB ;number是第几页,type是新闻分类的名字也就是类型
下面是主要的函数//更多列表
function newsList(number,type){
var url="/news.do?method=newsList";
$j.post(url,{number:number,type:type},function (xml){
$j('#insid').html(xml);
});
};点more时触发这个函数,发生了post请求$j.post//分页
function nextTo(number,type){
if(type=="搜索"){
newsSo(number);
}else{
newsList(number,type);
}
};点分页触发这个,又间接触发了newsList(),同样发生了post请求
$j.post的源码:post: function( url, data, callback, type ) {
if ( jQuery.isFunction( data ) ) {
callback = data;
data = {};
}
return jQuery.ajax({
type: "POST",
url: url,
data: data,
success: callback,
dataType: type
});
},jq文件太多代码了,大概明白了是提交到http://www.cmt178.com/news.do?method=newsList地址,post数据是number=分页&type=新闻类型,
可以用源代码查看器看返回的代码
zhouchanglin
发表于 2010-12-15 13:20:33
cityber你的火爆展会网做好了,采集的时候采集线程1,间隔长些,post的采集时需要些时间的,往往很慢
jiajufan
发表于 2010-12-17 13:51:54
本帖最后由 jiajufan 于 2010-12-17 13:55 编辑
谢谢zhouchanglin!
求:http://club.gigabyte.cn/Zhidao_xjj/这个站的规则 做了好长时间还是没做出来
zhouchanglin
发表于 2010-12-17 19:33:35
本帖最后由 zhouchanglin 于 2010-12-17 19:38 编辑
回复 14# jiajufan
做好了,这是页脚部分的源码<div id="AspNetPager1">
<div style="width:60%;float:left;">
<a disabled="disabled" style="margin-right:5px;">首页</a><a disabled="disabled" style="margin-right:5px;">上一页</a><span style="margin-right:5px;font-weight:Bold;color:red;">1</span><a href="javascript:__doPostBack('AspNetPager1','2')" style="margin-right:5px;">2</a><a href="javascript:__doPostBack('AspNetPager1','3')" style="margin-right:5px;">3</a><a href="javascript:__doPostBack('AspNetPager1','4')" style="margin-right:5px;">4</a><a href="javascript:__doPostBack('AspNetPager1','5')" style="margin-right:5px;">5</a><a href="javascript:__doPostBack('AspNetPager1','6')" style="margin-right:5px;">6</a><a href="javascript:__doPostBack('AspNetPager1','7')" style="margin-right:5px;">7</a><a href="javascript:__doPostBack('AspNetPager1','8')" style="margin-right:5px;">8</a><a href="javascript:__doPostBack('AspNetPager1','9')" style="margin-right:5px;">9</a><a href="javascript:__doPostBack('AspNetPager1','10')" style="margin-right:5px;">10</a><a href="javascript:__doPostBack('AspNetPager1','11')" style="margin-right:5px;">...</a><a href="javascript:__doPostBack('AspNetPager1','2')" style="margin-right:5px;">下一页</a><a href="javascript:__doPostBack('AspNetPager1','79')" style="margin-right:5px;">尾页</a> <input type="text" value="1" name="AspNetPager1_input" id="AspNetPager1_input" onkeydown="ANP_keydown(event,'AspNetPager1_btn');" style="width:30px;" /><input type="submit" value="go" name="AspNetPager1" id="AspNetPager1_btn" onclick="if(ANP_checkInput('AspNetPager1_input',79)){__doPostBack('AspNetPager1','')} else{return false}" />
</div><div style="width:40%;float:left;">
[共79页/当前为第1页]有2种方式翻页,1直接点击页码翻页,2输入页数,点提交按钮,规则里有用的是输入页数的post数据
首先这个页面只有一个表单<form name="form1" method="post" action="" id="form1">,所有都是提交到这个表单
点击页数,路第9页,触发<a href="javascript:__doPostBack('AspNetPager1','9')" style="margin-right:5px;">9</a><,:__doPostBack函数源码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();
}
}这样<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />第1中提交方式,点击页码提交,路点了第9页,__doPostBack('AspNetPager1','9')__EVENTTARGET=AspNetPager1;__EVENTARGUMENT=9 ,所以说;__EVENTARGUMENT代表页码,而这样的提交那个点击按钮参数没有被提交><input type="submit" value="go" name="AspNetPager1" id="AspNetPager1_btn" onclick="if(ANP_checkInput('AspNetPager1_input',79)){__doPostBack('AspNetPager1','')} else{return false}" />
我想这个参数的有无就判断了是哪中提交方式了,而这个没有提交按钮的参数,接收的程序就会把__EVENTARGUMENT的值作为页码;
这种方式的post数据时__VIEWSTATE=&nav_hp=4&AspNetPager1_input=post随机值&_EVENTTARGET=AspNetPager1&__EVENTARGUMENT=分页,这里略去了一些不必要的参数
第2中提交方式输入页数,点提交按钮:;<input type="text" value="1" name="AspNetPager1_input" id="AspNetPager1_input" onkeydown="ANP_keydown(event,'AspNetPager1_btn');" style="width:30px;" /><input type="submit" value="go" name="AspNetPager1" id="AspNetPager1_btn" onclick="if(ANP_checkInput('AspNetPager1_input',79)){__doPostBack('AspNetPager1','')} else{return false}" />
onclick="if(ANP_checkInput('AspNetPager1_input',79)){__doPostBack('AspNetPager1','')} else{return false}" />首先用ANP_checkInput函数检查输入的页数是否符合要求,符合即会执行doPostBack函数,与方式1提交的不同在于doPostBack的第2个参数,一个是页码,一个是空字符,而第2中提交会把提交按钮参数<input type="submit" value="go" name="AspNetPager1,提交,这样的提交因为提交了按钮参数,接收的程序就会把输入框中的页码做为返回的页码
输入页数,点提交按钮post数据:__VIEWSTATE=post随机值&nav_hp=4&AspNetPager1_input=分页&AspNetPager1=go&_EVENTTARGET=AspNetPager1&__EVENTARGUMENT=规则
jiajufan
发表于 2010-12-17 23:01:47
本帖最后由 jiajufan 于 2010-12-17 23:04 编辑
回复 15# zhouchanglin
谢谢zhouchanglin!非常感谢!感谢您的劳动!感谢您的时间!
nr05
发表于 2010-12-18 01:02:20
http://www.99mm.cc/meitui/761.html 内容页的分页怎么采集呢!
zhouchanglin
发表于 2010-12-18 13:19:20
回复 17# nr05
做好了,这个需要插件,你是标准版的可以用
路过只是想要图片地址,可以不用采分页,但还是要用插件循环生成图片地址,其实就是通过插件在获取的网页源码的尾部追加图片的源码和火车可以识别的分页的源码,
插件在网页源码的尾部追加了全部图片源码的区域和分页的区域代码;
这里是插件,解压后把插件用在采内容时,规则分页设置可以参考 ,测试时你会在内容标签看到尾部的增加的代码,这就是在html源码基础上追加的效果
live2learn
发表于 2010-12-18 16:15:34
感谢LZ,好人啊。
citybeggar
发表于 2010-12-23 14:51:10
又来麻烦LZ了,
http://www.all2car.com/Company/Search.aspx?k=&pro_code=0&area_code=100100&WUC_BuySearch1%3AcValue=1&c=1这个地址怎么采啊
我用AspNetPager1&__EVENTARGUMENT=[分页]这样不行呢
页:
1
[2]
3
4
5
6
7
8
9
10
11