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
看看这个哦
。。。。。。
页: 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21
查看完整版本: js post网站专区