最近在写一个校园网络的搜索引擎,在处理页面中的链接时遇到点小问题,对于完整链接的获取用正则匹配可以很好的解决,但是网页中有很多相对的路径必须将它的前缀加上后才是一个完整的链接. 我是尝试过这样处理:因为蜘蛛在不断地循环抓取页面和分析页面中的链接,然后根据获得的新的链接再去抓取页面,当它在抓取某个页面时(如:http://www.123.com),分析页面中的链接,当找到如(web/index.jsp)这样的相对路径时我会将这个相对路径加到主页路径后(http://www.123.com/web/index.jsp)组成新的完整路径,这是问题来了,当抓取这个新的页面时,页面中的相对路径(如:web/other.jsp)如果还这样处理那么新生成的链接可能就成了这样:(http://www.123.com/web/index.jsp/web/other.jsp)显然这不是一个有效的链接,必须将(web/index.jsp)截掉后再加到主页链接后面.这样处理起来很麻烦,不知道有没有做过蜘蛛程序的大神能给出一个更可行的方法,作为新手会十分感激的!
如果即使是这样我提供一个参考给你试试看。
可以针对每个网站维护一个URL列表,列表里存相对比较靠近根目录的地址,如(http://www.123.com/web/和http://www.123.com/)是否靠近根目录按照/的个数来判断。当遇到无效链接报错时到这个列表里搜索URL,当URL与你当前页面的开头相同时用这个列表里的URL代替你当前的URL。
以 # 开头的就把 #a.jsp 替换当前Uri最后一个‘#’后的字符串(如果没有‘#’就直接添加后边)
以 ? 开头的就把 ?a.jsp 替换当前Uri最后一个‘?’后的字符串(如果没有‘?’就直接添加后边)
没有符号开头 a.jsp 直接添加到当前Uri后边