js+AJAX异步从优酷专辑中采集所有视频及信息

 更新时间:2010年02月07日 11:48:55   作者:  
上次写了一个 .NET从优酷专辑中采集所有视频及信息(VB.NET代码)
https://www.jb51.net/article/22031.htm
个人觉得不甚满意,因为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测试通过,但代码比较随意,所以兼容性不是很好。如果你需要使用,请自行修改代码。

相关文章

  • JavaScript基于Ajax实现不刷新在网页上动态显示文件内容

    JavaScript基于Ajax实现不刷新在网页上动态显示文件内容

    这篇文章主要介绍了JavaScript基于Ajax实现不刷新在网页上动态显示文件内容,可实现实时显示服务器上txt文件内容的功能,是Ajax基本应用,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • ajax实现数据分页查询

    ajax实现数据分页查询

    这篇文章主要为大家详细介绍了ajax实现数据分页查询的相关资料,以及ajax实现对数据库的查询,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 四步学会 Ajax

    四步学会 Ajax

    看了下面的函数说明,大家就可以简单的了解ajax的原理了。
    2009-07-07
  • Ajax调用restful接口传送Json格式数据的方法

    Ajax调用restful接口传送Json格式数据的方法

    这篇文章主要介绍了Ajax调用restful接口传送Json格式数据的方法的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-07-07
  • 比getjson好的底层函数是哪个有什么优点

    比getjson好的底层函数是哪个有什么优点

    比getjson好的底层函数优点在于如果网络出问题了,可以通过error方法来告诉用户出错,需要的朋友可以参考下
    2014-02-02
  • 纯JS实现AJAX局部刷新功能

    纯JS实现AJAX局部刷新功能

    下面给大家介绍JS实现AJAX局部刷新功能,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。对ajax实现局部刷新功能感兴趣的朋友一起看看吧
    2017-02-02
  • 5款Ajax 文件上传控件

    5款Ajax 文件上传控件

    如果你的网站含有文件上传功能,那可以使用本文介绍的5款Ajax文件上传控件,提升用户体验。要知道,上传文件总是个痛苦的过程,要消除不太现实,但至少如果你为减少用户的痛苦努力了,那用户也会喜欢你的网站的。
    2009-10-10
  • 浅谈Ajax请求与浏览器缓存

    浅谈Ajax请求与浏览器缓存

    下面小编就为大家带来一篇浅谈Ajax请求与浏览器缓存。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Ajax中通过JS代码自动获取表单元素值的示例代码

    Ajax中通过JS代码自动获取表单元素值的示例代码

    如果表单元素不多的情况我们常常会通过GET方式来获取表单元素值,但如果表单元素非常多,此时就需要用POST方式来获取表单元素值,那么如何来获取表单元素值呢
    2014-09-09
  • jquery ajax实现文件上传功能实例代码

    jquery ajax实现文件上传功能实例代码

    这篇文章主要介绍了jquery ajax实现文件拖拽上传功能的实例代码,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04

最新评论