一、引言
20世纪末是万维网开始膨胀的时期,它的发展速度是十分惊人的。据统计,万维网已经连通了世界上几乎所有的国家,并且万维网正在急速发展。目前,万维网已经成为世界上最大的信息源,成为全球范围内科研、教育、商业和社会、新闻、学校和专业机构介绍、图书及娱乐等信息的集大成者。近年来对万维网的研究的两大热点是网络搜索引擎的研究和网络拓扑结构的研究。对于网络信息挖掘的首先要面对的问题就是如何提取出网站内部的URL,只有获得了网站的所有URL才可以网站的全部内容。基于此本文给出了一种实用有效的提取网站内部URL的方法。
二、JAVA基础
Java语言方便灵活,是现在开发网络程序的主要语言。本文采用了Java语言来开发。在Java的提供的java.util.*和 java.net.* 工具包中提供了大量简单易用的API。此外,在网络上还有大量的开放源码。
HTMLParser v 1.3是一套优秀的开放源代码的提供HTML文件分析的工具包。它可以提供快速的、实事的文本分析的功能。HTMLParser最大的成功之处是它设计简单、速度快、应用方便。可以从http://htmlparser.sourceforge.net下载此工具包和了解其用法。
对于HTMLParser 工具包我们需要修改其中的htmlparser.java文件使其适用中文的html文件分析。htmlparser.java文件中具体实现细节就不再介绍。这里主要是把protected static final String DEFAULT_CHARSET = "ISO-8859-1";修改成protected static final String DEFAULT_CHARSET = "gb2312";因为采用默认的字符集"ISO-8859-1"对含有中文的html文件进行分析的时候就会出现乱码。必须进行new String(str.getBytes("ISO-8859-1"),"GB2312")的转换工作。
对于修改好的htmlparser工具包,需要重新压缩成.jar文件,放到jdk的工作环境中。
三、具体设计
首先新建一个静态全局Vector变量L,在算法的递归调用中往L中不断添加新发现的URL。公式(1)是一个遍历网站内部URL的数学表达式。
S=T(ui) (1)
s.t. ui O(ui)
ui Ui-1 i=1,2…m
其中T(u)是遍历一个站点的所有URL的函数,为了保证该遍历方法收敛这里我给出了两个限制条件,ui为一网站中的URL,O(ui)是判断ui是否为该网站内部的URL。
算法是:
1) 定义全局静态变量public static Vector svecLink;
2) 开始搜索网站W的主URL;
3) 解析出第一页面的所有URL;
4) 剔除无效的URL和非本站点的URL同时记录所获的URL的个数为a;
5) 把URL添加到svecLink中;
6) 从svecLink中取出最后a个URL分别递归调用此函数
为了能保证遍历的收敛,程序必须对URL进行严格限制。下面是一些具体实现:
1) 定义的全局变量
public final int DEEP=3; //遍历的深度
public static Vector svecLink, svecOutlink; //存放内部URL和外部URL
public static String hostName; //主机名称
public static boolean bl; //判断标志
private String location;
private Parser parser; //对超文本进行分析
2) 获取主机名称GetHostName()函数
通过该函数来判断所得URL是否是本网站的URL,如果不是就不需要添加svecLink中如果是并且以前没有提取过就添加到svecLink中。
public String GetHostName(String hostname)
{
URL aurl;
String ss=" ";
try
{
aurl=new URL(hostname);
ss=aurl.getHost();
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
return ss;
}
3) 递归遍历方法
由于网站中URL之间的连接构成了图,所以对图的遍历这里采用深度优先的方法。
public void extractLinks(String loc) throws ParserException {
System.out.println("Parsing "+loc+" for links...");
Vector vecTemp=new Vector();
try {
this.parser = new Parser(loc); //原理见HTMLParser
parser.registerScanners();
bl=true;
}
catch (ParserException e) {
bl=false;
e.printStackTrace();
}
String ss,str1;
URL wwwurl;
boolean byes;
int a=0;
b++;
Node [] links = parser.extractAllNodesThatAre(LinkTag.class);
//获取一个页面中//所有的URL
for (int i = 0;i < links.length;i++) {
if(bl)
{
byes=true;
System.out.println("Total url is "+links.length+"This page has url "+i);
LinkTag linkTag = (LinkTag)links[i];
str1=linkTag.getLink();
if(str1.equals("")) continue;
if(str1.charAt(str1.length()-1)==/
||str1.charAt(str1.length()-1)==\)
str1=str1.substring(0,str1.length()-1);
if(!svecLink.contains(str1))
{
try
{
wwwurl=new URL(str1);
wwwurl.getContent();
}
catch(MalformedURLException e)
{
byes=false;
}
catch(IOException e)
{
byes=false;
}
if(GetHostName(str1).equals(hostName) && byes)
{
a++;
tID++;
svecLink.add(str1);
vecTemp.add(str1);
System.out.println("the url is "+str1);
}
else
{
svecOutlink.add(str1);
}
}
}
}
String strNew;
if(a>0&&b<=DEEP)
{
for(int i=0;i<VECTEMP.SIZE();I++)
{
strNew=(String)vecTemp.get(i);
System.out.println("this is "+strNew);
extractLinks(strNew); //递归调用
}
}
}
四、结论
本文介绍给出了一种提取网站内部URL的实现方法,本文的方法对网络机器人的研究和WEB文本挖掘提供了方便的工具。在程序的实现中还有许多实际的困难,需要在实验中不断完善和改进
分享到:
相关推荐
在互联网世界中,爬虫技术是获取网页信息的重要手段,而提取网站内部URL是爬虫工作中的关键步骤。本文将详细讲解如何使用JAVA语言来实现这一功能,这对于我们理解网络基础知识,尤其是网络爬虫的工作原理至关重要。 ...
Java 排序算法使用及场景说明 本文档主要介绍了 Java 排序算法的使用和场景说明,包括了五个实践场景的解决方案。 Scenario 1: 找出两个文件共同的 URL 在这个场景中,我们有两个文件 a 和 b,每个文件中存放了 ...
本篇将详细探讨爬虫算法在Java语言中的实现及其相关知识点。 首先,Java作为一种面向对象的编程语言,因其强大的功能和跨平台特性,常被用于构建爬虫系统。在Java中,我们可以利用HttpURLConnection或HttpClient库...
Java URL转换工具是一种用于解析和处理URL的程序,它能够帮助开发者获取URL背后的真实地址,尤其是在面对重定向、参数编码等情况时。在Web开发中,URL(Uniform Resource Locator)是互联网资源的统一地址,它包含了...
可以使用队列或优先级队列来组织URL。 2. 网页下载:使用HttpURLConnection或者HttpClient等库,发送GET或POST请求,获取服务器响应的HTML内容。 3. HTML解析:如使用Jsoup库解析HTML,定位并提取目标元素。XPath和...
总结来说,Java实现网页消重算法主要包括内容提取、预处理、特征表示、相似度计算和阈值设定五个步骤,涉及到的工具有Jsoup、Apache Lucene以及Apache Commons Math库。实际应用时,需要根据项目需求选择合适的技术...
这个项目的目标是教你如何使用Java编程语言来实现一个自定义的搜索功能,使用户能够在你的网站上像在Google一样方便地搜索内容。这一功能不仅提升了用户体验,也提高了网站信息的可访问性。 【描述】:在实现这个...
这篇毕业设计报告主要聚焦在使用Java语言实现一个基于广度优先搜索(BFS)算法的多线程网络爬虫程序。网络爬虫是自动化获取互联网信息的重要工具,它能够遍历网页并抓取所需数据。Java作为一种通用且跨平台的编程...
重复出现的字句可能是扫描错误或是文档损坏的结果,这使得无法从这些内容中提取有关“Java语言程序设计”课程的具体知识点。不过,我可以基于这个标题和描述来详细解释“Java语言程序设计”相关的知识点。 Java语言...
6. **VisitedUrlQueue.java**:这个类记录已访问过的URL,防止重复爬取和循环爬取,一般也会使用类似UrlQueue的数据结构。 在网络爬虫算法中,主要涉及以下几个关键技术点: 1. **网络请求**:HttpClient库提供了...
Java是一种广泛使用的编程语言,尤其在开发Web应用和网络爬虫方面表现突出。在这个特定的项目中,我们有一个基于BFS(广度优先搜索)算法的整站爬虫,它是用Java实现的。BFS是一种在图或树结构中遍历节点的方法,...
网页链接提取精灵是一款专门设计用于从指定网站中批量提取所有URL链接的工具。这款软件能够高效地抓取网站导航和目录站中的各个网址,而不会下载网页的实际内容,这对于网络爬虫开发、网站分析或者SEO优化等场景非常...
在Java中,可以使用Thread类或Runnable接口来创建和管理线程。线程间的协作和资源管理是多线程爬虫实现的关键,需要考虑同步机制以避免数据竞争问题。 【TCP/IP协议族与Socket编程】 TCP/IP协议族是互联网通信的...
尽管如此,我还是将尝试根据扫描文本中的线索,提取出与Java编程语言相关的重要知识点。请注意,以下内容可能无法准确反映原始文档的完整性和准确性,但将尽可能地满足您的要求。 Java是一种广泛使用的面向对象的...
Java语言程序设计是计算机科学领域中的一个重要主题,它是一种广泛使用的高级编程语言,以其跨平台、面向对象和安全性而闻名。本学习成果聚焦于Java语言的核心概念和技术,旨在帮助开发者掌握编写高效、可靠且可维护...
在本文中,我们将深入探讨如何使用科大讯飞的语音识别技术与Java编程语言结合,以实现将输入的音频文件转换为可编辑的文字内容。科大讯飞是中国领先的语音技术提供商,其API提供了高效且准确的语音转文本功能,广泛...
本指南将深入探讨如何利用Java语言来实现这一功能。 首先,我们需要了解网络机器人工作的基本原理。它通过HTTP协议与服务器通信,发送请求获取HTML或其他格式的网页内容。这些请求通常由`java.net.URL`类和`java...
9. **网站遍历算法**:为了下载整个网站,需要设计一种算法来遍历所有页面。这可能涉及到深度优先搜索(DFS)或广度优先搜索(BFS),并结合Jsoup解析网页的链接。 10. **资源调度与优化**:根据网络条件和系统资源...
总的来说,这个Java源码项目不仅涵盖了PageRank算法的实现,还涉及到网页链接的抓取、解析和处理,以及搜索引擎查询接口的使用。对于学习网络爬虫、链接分析以及搜索引擎优化的开发者来说,这是一个宝贵的实践案例。...