个人觉得不甚满意,因为VB.NET在.NET环境下执行采集,产生的网络连接与正则匹配消耗太大,而我最终的应用是在视频采集提交上,所以就考虑用JS的AJAX+正则表达式来完成这个目标。 以前一直没有系统地学习JS和正则,所以花费的时间比预想的要长,折腾了一个晚上,糊弄出了下面的代码。=..= 复制代码 代码如下: JavaScipt AJAX & 正则表达式 test <BR>function wrt(s){ <BR>subret.value = s + "\n" + subret.value; <BR>//subret.value += "\n" + s; <BR>} <BR>var objRequest; //定义一个XML请求对象 <BR>var previd = "",nowid =0,listid = "",iscancel=false; //其他变量 <BR>function getlid(){ <BR>var listid = weburl.value.match(/playlist_show\/.*(?=id_(\d+)).*\.html$/i); <BR>if(!listid){ <BR>return null; <BR>} else { <BR>return listid[1]; <BR>} <BR>} <BR>function retweb(){ <BR>if(objRequest.readyState == 4 && objRequest.status == 200){ <BR>// 获得回调 <BR>var webstr = objRequest.responseText; <BR>vid = webstr.match(/var\s+videoId\s*=\s*"(\d+)"\s*;/)[1]; <BR>vtitle = webstr.match(/<title>(.+) - (.+) - 视频 - 优酷视频 - 在线观看( - )?<\/title>/)[2]; <BR>wrt(nowid + ":" + vtitle + "=" + vid); <BR>if(previd == vid) return; <BR>previd = vid; <BR>nowid += 1; <BR>// 开始新循环 <BR>if(iscancel) return; <BR>tstart(); <BR>} else { <BR>//alert("回调失败!"); <BR>return;//"error: " + objRequest.statusText; <BR>} <BR>} <BR>function getweb(u){ <BR>objRequest = new XMLHttpRequest(); //new ActiveXObject("Msxml2.XMLHTTP"); //IE5&6初始化XMLHTTP对象 <BR>objRequest.onreadystatechange = retweb; //异步回调方法 <BR>objRequest.open("GET",u,true); <BR>objRequest.send(null); <BR>} <BR>function tstart(){ <BR>if(listid==""){ <BR>listid=getlid(); <BR>} <BR>url = "http://v.youku.com/v_playlist/f" + listid + "o1p" + nowid + ".html"; <BR>getweb(url); <BR>} <br><br> #star 思路基本跟上次的一样,所以就不多赘述了。 用VB.NET一个页面的采集时间一般在1秒钟左右,而这个代码依靠客户端脚本,每个页面采集在0.3~0.5秒左右,依据用户的电脑配置而不同。 个人用IE7测试通过,但代码比较随意,所以兼容性不是很好。如果你需要使用,请自行修改代码。 夜闻香原创,转载请保留此信息 博客: http://clso.cnblogs.com/ 主页: http://www.cleclso.cn/