下面转到 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专栏版块参加讨论
|