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获取GridView选择的行内容
Apr 14 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
javascript操作excel生成报表全攻略
May 04 Javascript
jquery操作checkbox示例分享
Jul 21 Javascript
JS实现向表格行添加新单元格的方法
Mar 30 Javascript
JavaScript实现的浮动层框架用法实例分析
Oct 10 Javascript
jQuery电话号码验证实例
Jan 05 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
Mar 13 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
原生JS实现无缝轮播图片
Jun 24 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
vue-router 控制路由权限的实现
Sep 24 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/03/02 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
js快速排序的实现代码
2013/12/08 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
浅析node.js中close事件
2014/11/26 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Python实现八皇后问题示例代码
2018/12/09 Python
flask应用部署到服务器的方法
2019/07/12 Python
在pycharm中实现删除bookmark
2020/02/14 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Otel.com:折扣酒店预订
2017/08/24 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
拓展培训心得体会
2014/01/04 职场文书
英文感谢信范文
2015/01/21 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
员工福利申请报告
2015/05/15 职场文书
经费申请报告范文
2015/05/18 职场文书
春节随笔
2015/08/15 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript