AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
个人觉得不甚满意,因为VB.NET在.NET环境下执行采集,产生的网络连接与正则匹配消耗太大,而我最终的应用是在视频采集提交上,所以就考虑用JS的AJAX+正则表达式来完成这个目标。
以前一直没有系统地学习JS和正则,所以花费的时间比预想的要长,折腾了一个晚上,糊弄出了下面的代码。=..=
思路基本跟上次的一样,所以就不多赘述了。
用VB.NET一个页面的采集时间一般在1秒钟左右,而这个代码依靠客户端脚本,每个页面采集在0.3~0.5秒左右,依据用户的电脑配置而不同。
个人用IE7测试通过,但代码比较随意,所以兼容性不是很好。如果你需要使用,请自行修改代码。
夜闻香原创,转载请保留此信息
博客: http://clso.cnblogs.com/
主页: http://www.cleclso.cn/
以前一直没有系统地学习JS和正则,所以花费的时间比预想的要长,折腾了一个晚上,糊弄出了下面的代码。=..=
代码如下:
<!-- 夜闻香原创,转载请保留此信息,万分感谢! 博客: http://clso.cnblogs.com 主页: http://cleclso.cn QQ:315514678 E-mail:clso#qq.com 欢迎技术交流! --> <html> <head> <title>JavaScipt AJAX & 正则表达式 test</title> <script type="text/javascript" language="javascript"> function wrt(s){ subret.value = s + "\n" + subret.value; //subret.value += "\n" + s; } var objRequest; //定义一个XML请求对象 var previd = "",nowid =0,listid = "",iscancel=false; //其他变量 function getlid(){ var listid = weburl.value.match(/playlist_show\/.*(?=id_(\d+)).*\.html$/i); if(!listid){ return null; } else { return listid[1]; } } function retweb(){ if(objRequest.readyState == 4 && objRequest.status == 200){ // 获得回调 var webstr = objRequest.responseText; vid = webstr.match(/var\s+videoId\s*=\s*"(\d+)"\s*;/)[1]; vtitle = webstr.match(/<title>(.+) - (.+) - 视频 - 优酷视频 - 在线观看( - )?<\/title>/)[2]; wrt(nowid + ":" + vtitle + "=" + vid); if(previd == vid) return; previd = vid; nowid += 1; // 开始新循环 if(iscancel) return; tstart(); } else { //alert("回调失败!"); return;//"error: " + objRequest.statusText; } } function getweb(u){ objRequest = new XMLHttpRequest(); //new ActiveXObject("Msxml2.XMLHTTP"); //IE5&6初始化XMLHTTP对象 objRequest.onreadystatechange = retweb; //异步回调方法 objRequest.open("GET",u,true); objRequest.send(null); } function tstart(){ if(listid==""){ listid=getlid(); } url = "http://v.youku.com/v_playlist/f" + listid + "o1p" + nowid + ".html"; getweb(url); } </script> </head> <body> <input type="text" id="weburl" value="http://www.youku.com/playlist_show/id_2350764.html" style="width:640" /><br /> <textarea id="subret" readonly="readonly" style="width:640; height:360;">#star</textarea> <br/> <input type=button value="开始提取专辑" onclick="if(iscancel)iscancel=false;tstart();" /> <input type=button value="清除文本" onclick="subret.value='';nowid =0;preid='';listid='';" /> <input type=button value="暂停" onclick="iscancel=true;" /> </body> </html>
思路基本跟上次的一样,所以就不多赘述了。
用VB.NET一个页面的采集时间一般在1秒钟左右,而这个代码依靠客户端脚本,每个页面采集在0.3~0.5秒左右,依据用户的电脑配置而不同。
个人用IE7测试通过,但代码比较随意,所以兼容性不是很好。如果你需要使用,请自行修改代码。
夜闻香原创,转载请保留此信息
博客: http://clso.cnblogs.com/
主页: http://www.cleclso.cn/
相关推荐
kentrl 2020-11-10
结束数据方法的参数,该如何定义?-- 集合为自定义实体类中的结合属性,有几个实体类,改变下标就行了。<input id="add" type="button" value="新增visitor&quo
ajaxyan 2020-11-09
zndy0 2020-11-03
学留痕 2020-09-20
Richardxx 2020-11-09
learningever 2020-09-19
chongxiaocheng 2020-08-16
ajaxhe 2020-08-16
lyqdanang 2020-08-16
curiousL 2020-08-03
TONIYH 2020-07-22
时光如瑾雨微凉 2020-07-19
83510998 2020-07-18
坚持着执着 2020-07-16
jiaguoquan00 2020-07-07
李永毅 2020-07-05
坚持着执着 2020-07-05