huxiaoming168
发表于 2011-4-12 00:32:42
http://www.itpar.com/A_Dealer/Express.aspx?CityCode=410100 楼主帮忙分析P0ST数据,能采集公司名称和联系人手机号码
cinta
发表于 2011-4-15 15:47:02
感谢 楼主 无私分享
帮我看看
http://www.ccct.org.cn/information/branch/huiyuan1.jsp?xsterm=xinyongpingjia
zhouchanglin
发表于 2011-4-15 17:58:41
回复 124# cinta
这个需要登录,即需要cooike。然后很容易菜了
cinta
发表于 2011-4-15 18:08:25
本帖最后由 cinta 于 2011-4-15 18:18 编辑
感谢,我以一直以为是要POST的呢,又不懂,搜索POST 找到你这贴,唉
摸索中。。感谢 zhouchanglin
zm235
发表于 2011-4-23 02:26:39
研究几天了,还是搞不定,请求大侠帮忙看一下。
http://www.ynzb.com.cn/Project_FindContractor.aspx
zhouchanglin
发表于 2011-4-23 13:41:44
本帖最后由 zhouchanglin 于 2011-4-24 12:00 编辑
回复 123# huxiaoming168
虽然做了很多这样的网站也有些无趣了,承诺还要坚持,post的大概都是一样的方法,采集又何尝不是呢,熟悉javascript基本上做采集规则就没有什么问题了
不用抓包会做的更好,更明白
具体的做法可以参考我前面的规则说明,都是一个道理
788555
发表于 2011-4-30 03:15:25
楼主,辛苦你做一下soso.com预览采集的规则
http://www.soso.com/q?pid=s.idx&w=%C3%C0%C8%DD 每个结果的“预览”怎么在js里判断它的网址!
万分感谢!!!!!!!!!!!!!!
zhouchanglin
发表于 2011-4-30 16:21:36
回复 129# 788555
这些大站一般都比较复杂,表现在代码加密,代码格式乱,多,特别是经常用单个字母代表变量对象,让人第一眼就吓趴下
搜搜的核心js文件是http://www.soso.com/js/sosoweb_result.js?5618,对象的事件函数都可以在这里找到,当鼠标经过预览时的处理函数也在其中,代码太复杂,我没有找到预览时的处理函数,不过通过几个零散的函数,最后模糊的找出了获得预览内容的请求地址的格式
获得预览内容的请求地址的格式:http://www.soso.com/interface/preview.q?from=web&url=预览网站的网址路http://www.soso.com/interface/preview.q?from=web&url=http://www.lady8844.com/ 就是一个获得预览内容的地址
下面是一些分析:
当鼠标经过预览时发生的是ajax,
预览失败时重试函数:
function tryAgain(a,b)
{_$("tryAgain").style.display="none";
_$("tryAgainWaiting").style.display="block";
downloadUrl(a,function(f,e){if(f){_$("prevshow").className="main";_$("prevshow").innerHTML=f}
else
{_$("prevshow").className="main1";_$("prevshow").innerHTML="<br /><br />对不起,您所查看的预
览暂时无法打开,请您直接查看网页。"}})}
其中downloadUrl(a,function(f,e)可以找到ajax地址,是比较重要的
downloadUrl函数:function downloadUrl(b,k,g){method=g?g:"GET";if(window.XMLHttpRequest){var a=new
XMLHttpRequest()}else{var f=
["Msxml2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2
.XMLHTTP","Microsoft.XMLHTTP"];for(var j=0;j<f.length;j++){try{var a=new ActiveXObject(f
);break}catch(h){}}}a.open(method,b,true);if(method=="POST"){setRequestHeader("Content-
Type","application/x-www-form-urlencoded; charset=UTF-8")}a.onreadystatechange=function()
{if(a.readyState==4){k(a.responseText,a.status);delete (a)}};a.send(null)}这个函数作用是建立ajax请求对象,a.open(method,b,true);是发送请求,那么b就是请求地址了,而b
并且设置了状态改变的处理函数:a.onreadystatechange=function()
{if(a.readyState==4){k(a.responseText,a.status);delete (a)}};a.send(null)}这里k(a.responseText,a.status);k是传入的一个函数,见下面的代码:downloadUrl(r,function(z,y){if(v==e&&g_eCurPrv){if(y==200){if(z.trim().length<1)
{_$("prevshow").className="main1";_$("prevshow").innerHTML="<span id='tryAgain'><br /><br />
预览内容暂时无法显示,请<a href='#'onclick=\"javascript:tryAgain('"+r+"','"+u+"');return
false;\" >重试</a>。</span><span id='tryAgainWaiting' style=\"display:none\">正在载入,请稍
候...</span>"}else{_$("prevshow").innerHTML=z}}else
{_$("prevshow").className="main1";_$("prevshow").innerHTML="<br /><br />预览内容暂时无法显示
,请<a href='#' onclick=\"javascript:tryAgain('"+r+"','"+u+"');return false;\" >重试
</a>。"}}});可以看出a.responseText是function(z,y)参数z,a.status是参数y,最后成功后,把结果设置在prevshow div中,变量用单字母替代,看上去眼花缭乱
通过downloadUrl(r,function(z,y),这是个执行的过程,那摩r就是请求地址,
js文件代码里有var x=n(w);
b(w,x);_$("prevshow").innerHTML="正在载入,请稍候...";
var v=++e;
var t=parseInt(w.getAttribute("id").substr(3));
var r="/interface/preview.q?from=web&url="+encodeURIComponent(x);if(t>=40&&t<1000){r=r+"&w="+encodeURIComponent
(__qrkw)}else{r=r+"&w="+encodeURIComponent(__previewkw)}所以var r="/interface/preview.q?from=web&url="+encodeURIComponent(x);
由x=var x=n(w);
n(w)函数:function n(t){var q=t.getAttribute("id").split("_");var r=_$("res"+q.substr
(3)).getAttribute("href",2);var u=r.indexOf("http://www.soso.com/warn");if(u!==-1)
{splitstr=r.split("u=");return decodeURIComponent(splitstr.slice(1).join())}return r}函数作用:n(w);根据需要信息,w参数肯定预览的那个对象了,路id="pws1_normal">,获得当前记录预览网址,<a href="http://www.lady8844.com/" id="res1",最后r就是这里的url,有2种情况,网址包含http://www.soso.com/warn的,要把u=后的才是要的url,而没有的就直接是了,一般都不包含http://www.soso.com/warn
这样var r="/interface/preview.q?from=web&url="+encodeURIComponent(x);
经测试encodeURIComponent可以不用,
r就是ajax地址,x是目标网址,这样地址格式就是http://www.soso.com/interface/preview.q?from=web&url=目标地址,这个网站我是一知半解,大概知道了请求的过程
当然用抓包会快很多,应该可以抓到这样的地址,是get方式的
788555
发表于 2011-4-30 22:35:22
zhouchanglin 太棒了,非常非常非常的感谢。
6318570
发表于 2011-5-1 17:29:37
http://search.eachnet.com/category/170003-wuhuabamen.html
看看这个哦
。。。。。。