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 相关文章推荐
javascript下4个跨浏览器必备的函数
Mar 07 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
May 23 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
浅析Javascript中bind()方法的使用与实现
Apr 29 Javascript
js判断PC端与移动端跳转
Dec 24 Javascript
微信小程序 跳转方式总结
Apr 20 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
ES6中Array.find()和findIndex()函数的用法详解
Sep 16 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
Apr 17 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计算数组不为空元素个数的方法
2014/01/27 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
js实现抽奖功能
2020/11/24 Javascript
python实现排序算法
2014/02/14 Python
利用Python获取操作系统信息实例
2016/09/02 Python
python读取图片任意范围区域
2019/01/23 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
班主任工作年限证明
2014/01/12 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
学期自我评价
2014/01/27 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
办公室卫生管理制度
2015/08/04 职场文书
标准发言稿结尾
2019/07/18 职场文书
Django基础CBV装饰器和中间件
2022/03/22 Python