• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH AS 编程>AS高手篇>文章内容
  • 用flash从百度搜索中找歌词

  • 来源: 作者: 2006-07-10 【

下面转到 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++) {
......
}
对每个区块执行同样的操作。现在我们只看看其中一块的处理。


上一页 1 23 4 下一页

上一篇:新浪/闪客帝国 图片效果解析   下一篇:Flash 与三维全景结合
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
推荐内容

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)