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

作者:异步漫步时间:2026-10-24 14:40:00浏览:471

本文介绍一种基于JavaScript和AJAX的技术方案,用于从优酷专辑页面异步采集视频列表及详细信息。相比VB.NET服务端处理,该方法利用客户端脚本实现更快的采集速度(约0.3-0.5秒/页),并通过正则表达式提取视频ID和标题。文章提供了完整的HTML/JS代码示例,包含开始、暂停、清除等功能,适用于IE7及以上浏览器环境。

https://www.jb51.net/article/22031.htm


技术选型与背景

作者认为此前使用VB.NET在.NET环境下进行数据采集的方式不够理想,因为网络连接建立和正则匹配过程消耗资源较大。鉴于最终应用场景涉及视频数据的提交,因此决定采用JavaScript的AJAX技术结合正则表达式来实现这一目标。


由于此前未系统学习过JavaScript和正则表达式,实际开发耗时超出预期。经过一晚的调试与尝试,完成了以下代码实现。



代码实现与功能说明

代码部分


具体代码实现如下:

 
<!-- 
本文由夜闻香原创,转载请注明出处,深表感谢!
博客地址: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进行单页面采集的时间通常在一秒左右,而此段客户端脚本代码在每页采集上仅需0.3至0.5秒,具体耗时取决于用户电脑的配置性能。


作者使用IE7浏览器测试通过,但代码编写较为随意,因此兼容性可能不佳。如需在实际项目中使用,请自行修改代码以适应环境。

作者最新文章