AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)


Posted in Javascript onNovember 20, 2010

个人觉得不甚满意,因为VB.NET在.NET环境下执行采集,产生的网络连接与正则匹配消耗太大,而我最终的应用是在视频采集提交上,所以就考虑用JS的AJAX+正则表达式来完成这个目标。
以前一直没有系统地学习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/
Javascript 相关文章推荐
指定js可访问其它域名的cookie的方法
Sep 18 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
jQuery插件的写法分享
Jun 12 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 Javascript
理解JavaScript事件对象
Jan 25 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
js使用xml数据载体实现城市省份二级联动效果
Nov 08 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
探索Vue高阶组件的使用
Jan 08 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
javascript来定义类的规范小结
Nov 19 #Javascript
Javascript面象对象成员、共享成员变量实验
Nov 19 #Javascript
js 创建快捷方式的代码(fso)
Nov 19 #Javascript
javascript 函数参数限制说明
Nov 19 #Javascript
Javascript的并行运算实现代码
Nov 19 #Javascript
js里的prototype使用示例
Nov 19 #Javascript
Google 静态地图API实现代码
Nov 19 #Javascript
You might like
php数据类型判断函数有哪些
2013/09/23 PHP
教你如何使用php session
2013/10/28 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
如何通过jdbc调用存储过程
2012/04/19 面试题
竞职演讲稿范文
2014/01/11 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
代领毕业证委托书
2014/08/02 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
员工辞职信怎么写
2015/02/27 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python