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

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

js post网站专区

[复制链接]
发表于 2011-4-12 00:32:42 | 显示全部楼层
http://www.itpar.com/A_Dealer/Express.aspx?CityCode=410100   楼主帮忙分析P0ST数据,能采集公司名称和联系人手机号码
发表于 2011-4-15 15:47:02 | 显示全部楼层
感谢 楼主 无私分享
帮我看看

http://www.ccct.org.cn/information/branch/huiyuan1.jsp?xsterm=xinyongpingjia
 楼主| 发表于 2011-4-15 17:58:41 | 显示全部楼层
回复 124# cinta



这个需要登录,即需要cooike。然后很容易菜了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入会员

x
发表于 2011-4-15 18:08:25 | 显示全部楼层
本帖最后由 cinta 于 2011-4-15 18:18 编辑

感谢,我以一直以为是要POST的呢,又不懂,搜索POST 找到你这贴,唉
摸索中。。感谢 zhouchanglin 
发表于 2011-4-23 02:26:39 | 显示全部楼层
研究几天了,还是搞不定,请求大侠帮忙看一下。
http://www.ynzb.com.cn/Project_FindContractor.aspx
 楼主| 发表于 2011-4-23 13:41:44 | 显示全部楼层
本帖最后由 zhouchanglin 于 2011-4-24 12:00 编辑

回复 123# huxiaoming168

虽然做了很多这样的网站也有些无趣了,承诺还要坚持,post的大概都是一样的方法,采集又何尝不是呢,熟悉javascript基本上做采集规则就没有什么问题了
不用抓包会做的更好,更明白

具体的做法可以参考我前面的规则说明,都是一个道理

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入会员

x
发表于 2011-4-30 03:15:25 | 显示全部楼层
楼主,辛苦你做一下soso.com预览采集的规则

http://www.soso.com/q?pid=s.idx&w=%C3%C0%C8%DD 每个结果的“预览”怎么在js里判断它的网址!

万分感谢!!!!!!!!!!!!!!
 楼主| 发表于 2011-4-30 16:21:36 | 显示全部楼层
回复 129# 788555

这些大站一般都比较复杂,表现在代码加密,代码格式乱,多,特别是经常用单个字母代表变量对象,让人第一眼就吓趴下

搜搜的核心js文件是
  1. http://www.soso.com/js/sosoweb_result.js?5618
复制代码
,对象的事件函数都可以在这里找到,当鼠标经过预览时的处理函数也在其中,代码太复杂,我没有找到预览时的处理函数,不过通过几个零散的函数,最后模糊的找出了获得预览内容的请求地址的格式

获得预览内容的请求地址的格式
  1. http://www.soso.com/interface/preview.q?from=web&url=预览网站的网址
复制代码
http://www.soso.com/interface/pr ... //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函数:
  1. function downloadUrl(b,k,g){method=g?g:"GET";if(window.XMLHttpRequest){var a=new

  2. XMLHttpRequest()}else{var f=

  3. ["Msxml2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2

  4. .XMLHTTP","Microsoft.XMLHTTP"];for(var j=0;j<f.length;j++){try{var a=new ActiveXObject(f

  5. [j]);break}catch(h){}}}a.open(method,b,true);if(method=="POST"){setRequestHeader("Content-

  6. Type","application/x-www-form-urlencoded; charset=UTF-8")}a.onreadystatechange=function()

  7. {if(a.readyState==4){k(a.responseText,a.status);delete (a)}};a.send(null)}
复制代码
这个函数作用是建立ajax请求对象,a.open(method,b,true);是发送请求,那么b就是请求地址了,而b

并且设置了状态改变的处理函数:
  1. a.onreadystatechange=function()

  2. {if(a.readyState==4){k(a.responseText,a.status);delete (a)}};a.send(null)}
复制代码
这里k(a.responseText,a.status);k是传入的一个函数,见下面的代码:
  1. downloadUrl(r,function(z,y){if(v==e&&g_eCurPrv){if(y==200){if(z.trim().length<1)

  2. {_$("prevshow").className="main1";_$("prevshow").innerHTML="<span id='tryAgain'><br /><br />

  3. 预览内容暂时无法显示,请<a href='#'  onclick="javascript:tryAgain('"+r+"','"+u+"');return

  4. false;" >重试</a>。</span><span id='tryAgainWaiting' style="display:none">正在载入,请稍

  5. 候...</span>"}else{_$("prevshow").innerHTML=z}}else

  6. {_$("prevshow").className="main1";_$("prevshow").innerHTML="<br /><br />预览内容暂时无法显示

  7. ,请<a href='#' onclick="javascript:tryAgain('"+r+"','"+u+"');return false;" >重试

  8. </a>。"}}});
复制代码
可以看出a.responseText是function(z,y)参数z,a.status是参数y,最后成功后,把结果设置在prevshow div中,变量用单字母替代,看上去眼花缭乱

通过downloadUrl(r,function(z,y),这是个执行的过程,那摩r就是请求地址,
js文件代码里有
  1. var x=n(w);
  2. b(w,x);_$("prevshow").innerHTML="正在载入,请稍候...";
  3. var v=++e;
  4. var t=parseInt(w.getAttribute("id").substr(3));
  5. var r="/interface/preview.q?from=web&url="+encodeURIComponent(x);if(t>=40&&t<1000){r=r+"&w="+encodeURIComponent

  6. (__qrkw)}else{r=r+"&w="+encodeURIComponent(__previewkw)}
复制代码
所以var r="/interface/preview.q?from=web&url="+encodeURIComponent(x);
由x=var x=n(w);
n(w)函数:
  1. function n(t){var q=t.getAttribute("id").split("_");var r=_$("res"+q[0].substr

  2. (3)).getAttribute("href",2);var u=r.indexOf("http://www.soso.com/warn");if(u!==-1)

  3. {splitstr=r.split("u=");return decodeURIComponent(splitstr.slice(1).join())}return r}
复制代码
函数作用:n(w);根据需要信息,w参数肯定预览的那个对象了,路id="pws1_normal">,获得当前记录预览网址
  1. ,<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是目标网址,这样地址格式就是
  1. http://www.soso.com/interface/preview.q?from=web&url=目标地址
复制代码
,这个网站我是一知半解,大概知道了请求的过程
当然用抓包会快很多,应该可以抓到这样的地址,是get方式的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入会员

x
发表于 2011-4-30 22:35:22 | 显示全部楼层
zhouchanglin 太棒了,非常非常非常的感谢。
发表于 2011-5-1 17:29:37 | 显示全部楼层
http://search.eachnet.com/category/170003-wuhuabamen.html
看看这个哦
。。。。。。
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

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

GMT+8, 2024-10-7 00:23

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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