| 下面转到 getLink 函数:function getLink(src) {
 nextPageLink = "http://www.baidu.com/"+src.slice(src.lastIndexOf("href=", src.indexOf("下一页"))+5, src.lastIndexOf("><", src.indexOf("下一页")));
 linkData = src.split("快照");
 for (var i = 0; i<linkData.length; i++) {
 linkData[i] = linkData[i].slice(0, linkData[i].lastIndexOf("<a"));
 linkData[i] = linkData[i].slice(linkData[i].lastIndexOf("href=")+6);
 linkData[i] = linkData[i].slice(0, linkData[i].indexOf("\""));
 }
 linkIndex = 1;
 openLRCPage(linkData[0]);
 }
 这是用来解析网页源文件的代码,我们用它来分析得到的搜索结果。
 第一句 nextPageLink = "http://www.baidu.com/"+src.slice(src.lastIndexOf("href=", src.indexOf("下一页"))+5, src.lastIndexOf("><", src.indexOf("下一页"))) 就不说了,它用来获得下一页的链接。
 linkData = src.split("快照") 它将网页的源代码以"快照"作为参照拆为不同的段,然后放到数组中。事实上,linkData=new Array(); linkData = src.split("快照") 这样写更标准一些。
 选取一个好的拆分关键字非常重要,它可以让你的运算量成倍降低(特别是要处理的数据量更大的时候,就更明显),在这里,我们使有"快照"这两个字,看看百度返回的结果:-----------------------------------------------------
 伍佰-突然的自我
 [ti:突然的自我]
 [al:伍佰&china blue 200 ]
 [offset:0]
 [00:05.00] 突然的自我
 [00:12.87]
 [00:31.74]听见你说朝阳起又落
 [00:37.62]晴雨难测道路是脚步多
 [00:43.49]我已习惯你突然间的自我
 [00:49.37]挥挥洒洒将自然看...
 www.musictea.com/music/lrc86407.htm?t=突 ... 4K 2005-12-24 - 百度快照
 www.musictea.com 上的更多结果
 水晶手机信息技术网--wav铃声 黄小琥 - 突然的.. [ti:突然的自我]
 [ar:黄小琥]
 [al:]
 [by:wolfpey]
 [offset:500]
 [00:02.67]《突然的自我》
 [00:10.12...[ti:突然的自我]
 [ar:黄小琥]
 [al:]
 [by:wolfpey]
 [offset:500]
 [00:02.67]《突然的自我》
 [00:10.12...
 www.zjnetcafe.com/html/7/60586.htm 5K 2005-10-14 - 百度快照
 -----------------------------------------------------
 这里只显示了两段文本,它有十个这样的文本块。分析一下,尽管每块文本的标题和内容都不同,但是每一段都会出现 "百度快照 " 这样的内容。在 Google 中则是这个: "网页快照 - 类似网页"
 在百度中,你可以选择"百度快照"作为拆分的参照(如果查看源代码,也可以找到更多的参照),在 Google 中,"网页快照" 和 "类似网页" 都可以使用 ,在这里,我们以 Google 为实例,说明如何选取好的关键字的一个例子:(在百度中,这只是一个巧合,就不作为教程的参考了) 在 Google 搜索框中输入"[ti:披着羊皮的狼",然后查看一下网页的源代码(菜单:查看> 源文件 或者用右键弹出菜单)。它们和你在 flash 中获得的数据是一样的。找到每个重复类似的文本块的那一段源代码:(我们取第二段) *********************************<p class=g>
 <a class=l href="http://www.rixiu.com/fei5/11/1140657ae45bc98.html" target=_blank onmousedown="return clk(0,'res','2','')">郑源/披着羊皮的狼.LRC 飞舞歌词fei5.com</a><br>
 <font size=-1>郑源/披着羊皮的狼.LRC. <b>...</b> [ti:披着羊皮的狼] [ar:郑源] [al:我最<br>火] [by:fei5.com] [offset:-500] [00:01.00]-披着羊皮的狼- [00:04.00]歌手:郑<br>源[00:08.00]专辑:我最火[00:12.00]词曲:刀郎[00:16.00] <b>...</b><br>
 <font color=#008000>
 <span dir=ltr>www.rixiu.com/fei5/11/1140657ae45bc98.html</span> - 6k - 补充材料 - </font>
 <nobr><a class=fl href="http://72.14.203.104/search?q=cache:jsIjyqajvhcJ:www.rixiu.com/fei5/11/1140657ae45bc98.html+%5Bti:%E6%8A%AB%E7%9D%80%E7%BE%8A%E7%9A%AE%E7%9A%84%E7%8B%BC&hl=zh-CN" target=_blank>网页快照</a> -
 <a class=fl href="/search?hl=zh-CN&lr=&newwindow=1&q=related:
 www.rixiu.com/fei5/11/1140657ae45bc98.html">类似网页</a></nobr>
 </font>
 *********************************
 看看"网页快照" 和 "类似网页" 的位置, "类似网页"差不多是在结尾了,直觉上,用 "类似网页" 分割将更不会产生混淆,更完整(因为如果用 "网页快照" 分割出来的数据,属于这一段在"网页快照" 的一部份数据将会分割到下一段中,一个分割段中包含了两块文本的数据而造成混乱)
 看看我们要取得什么,最终我们要得到的是指向最终页面的超链接。也就是这一段 " <a class=l href="http://www.rixiu.com/fei5/11/1140657ae45bc98.html" target=_blank onmousedown="return clk(0,'res','2','')">郑源/披着羊皮的狼.LRC 飞舞歌词fei5.com</a><br>" 事实上,我们只要取得这个超链接就可以了:www.rixiu.com/fei5/11/1140657ae45bc98.html
 最终我们将用String的slice方法取得这个字符串,但在取之前我们必须找到字符串开始的位置"http://" 和最后结束的位置 "bc98.html" ,这就要用到String.indexOf()或String.lastIndexOf()方法。在这里,我们使用逆向查找的方法。也就是String.lastIndexOf()。它是从后向前搜索,如果找到,它将返回靠后的那个字符串的位置。参数将指定要搜索的字符串,它还有一个搜索起始位置的参数(在比较高级查找的时候有用),在这里我们只用第一个字符串参数,详细请看看官方帮助文档中的说明: my_str.lastIndexOf(substring, [startIndex])参数:
 substring 一个整数或字符串,指定要搜索的字符串。
 startIndex 一个可选整数,指定搜索 substring 的起始点。
 返回:
 指定子字符串的最后一个匹配项的位置,或 -1。
 说明:
 方法;在字符串中从右向左搜索,并返回调用此方法的字符串中在 startIndex 之前找到的 substring 的最后一个匹配项的索引。如果没有找到 substring,则此方法返回 -1。
 for (var i = 0; i<linkData.length; i++) {......
 }
 对每个区块执行同样的操作。现在我们只看看其中一块的处理。
 出处:蓝色理想
责任编辑:蓝色月光
 上一页 本地直接从百度获取LRC歌词 一 下一页 本地直接从百度获取LRC歌词 三 ◎进入论坛Flash专栏版块参加讨论
	      |