找找高手中~如果打开指定页,将所有的连接<a></a>中href的地址得到,并逐级的将所有页的连接<a></a>中href的地址也得到呢。
有点类似于递归来进行文件搜所的意思~
用了几种方法。太乱了。。。我现在只能把头几页的所有连接得到
答的正确加送200分!
參考答案:这个...
FileCounts(URL)是得到所有内容,也就是HTML形势的对吧
那么你现在是否能得到getAllURL(HTMLContent) as Href ?
就是根据URL得到全部的URL集合?
只写算法,不具体代码了..希望能理解,到了这个地步估计你已经能得到一个页面的URL了(不然你前几页是怎么来的...)
由于是ASP的,用事件驱动可能不是很容易理解,所以我就用函数调用的办法了.找到合适的URL之后就dosth.(如果不要重复的,那么见下文)
dim FinalURLS(60000) as string '用于保存全部的URL列表,由于没有.net的hashtable以及arraylist 只能用这个凑合了 -_-!
dim Layers as integer '要搜索的最大层数,总不能无限吧...
dim CurLayers as integer '当前的层数
dim numOfUrl as long '现在找到的URL个数
dim NumOfTestUrl as long '测试的个数
public function doSth(URL as URL)
'比如写数据库啦,计算个数啦,看看里面有没有敏感信息啦之类
'找到之后调用的
end sub
public function getAllURL(URL) as string
dim __URLs() as String '这个就是临时存放URL的类型,你可以想象成string类型
dim __SubURLs() as String
__URLs=分析(URL) '这个分析,就是你的根据内容找到href的算法
if ubound(__URLs)>0 then
'至少有一个href
dim i as long
for i=0 to ubound(__URLs)
addHreftoURLs(__URLs(i)) '加到最后的结果,这个过程是处理字符串的,由于没有字典或者hashtable,所以这个用来遍历字符串,看看有没有重复的,然后剔除掉.
if Layers<>curLayers then '看看有没有超过最大要求层
'开始干活,目录层数加1
curLayers=curLayers+1
'开始递归调用,能看懂吧,在这个循环里面找下一层(Sub的)
__SubURLs=getAllURL(__URLs(i))
'由于我们是用addHreftoURLs来计算的,所以不用返回也是可以的,这里返回的目的是一种习惯,可能以后会用到某个网页的全部URL所以留着吧,去掉也行
getAllURL=__SubURLs
end if
end function
public sub addHreftoURLs(URL) '用于添加进去的
numoftesturl=numoftesturl+1
dim i as long
for i=0 to numofurl '在已经添加进去的找有没有重复的
if 重复了...... 就不写具体你怎么判断是否重复的了 - -
else
1 添加进去 同时numofurl+1 多了一个.
2 然后调用soSth.这个用于模拟Event,就是发生了"找到了"这个事件.你可以什么都不做,也可以 记录数据库或者用于其他地方.都是习惯问题,这个功能很实用的,所以通常写代码的时候直接习惯的留出来了....
end if
next
end sub
主要就这几个部分
1 全局变量,比如可以显示当前进度(额..ASP可能有难度...)
2 doSth...用不到的话可以无视
3 递归得到全部的URL 有层数控制
4 判断这个URL是否有效(重复)
主要就是那个递归,虽然代码不全,但是意思已经体现出来了.递归的时候容易让人搞混乱的地方是先做什么后做什么,哪部分是该做的.. 慢慢想清楚,最终还是能解决的.不要急着写代码.实在不行就画流程图...