一、引言
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文本挖掘提供了方便的工具。在程序的实现中还有许多实际的困难,需要在实验中不断完善和改进
分享到:
相关推荐
基于JAVA语言提取网站内部URL的算法有助于学习网络的基础知识
使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...
使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...
word分词器java源码RAKE-Java 快速自动关键字提取 (RAKE) 算法的 Java 8 实现,如:Rose, S.、Engel, D.、Cramer, N. 和 Cowley, W. (2010) 中所述。 从单个文档中自动提取关键字。 在 MW Berry & J. Kogan(编辑)...
该库尚未在中央存储库中,因此请从发布页面中获取JAR URL,并将其扔到您正在使用的任何依赖项管理器中。 那,或者只是下载JAR。 使用API 使用该库非常简单。 主类仅导出一个公共方法getKeywordsFromText() ,并且...
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续...然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是...然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续...然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
使用通用算法提取不固定格式正文(不算很难)40分 (2)中文分词(worldcount),将正文进行中文分词,保存每个新闻的URL、标题、正文等数据 评分标准:分词并将正文存储到文件15分;存储到HBase(本地)+5分 (3)...
长 URL 首先使用 MD5 算法进行散列。 然后提取散列值的 40 个最低有效位并编码到 base 62 系统(26 个小写字母 + 26 个大写字母 + 10 位数字)。 编码后的 base 62 字符串(最多 7 个字符)构成短 URL。 当请求短 ...
样板库提供了算法来检测和删除网页主要文本内容周围多余的“混乱”(样板、模板)。 该项目是 Christian Kohlschütter 的 Java 库的原生 python 端口 算法 该库使用的算法基于(并扩展)了 Christian Kohlschütte...
火车订票系统java源码开放KP 自动提取对文档意义显着的关键短语是语义文档理解的重要步骤。 为了促进这一研究领域,我们创建了 OpenKeyPhrase(OpenKP),这是一个大规模的开放域关键短语提取数据集。 该数据集包含 ...
试题爬取通过WebCollector爬虫框架网上爬取试题,通过Lucene全文搜索试题,通过遗传算法生成试卷 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续...
技术点38 使用堆转储来查找未优化的用户代码 6.2.5 硬件性能问题 技术点39 查找硬件的失效 技术点40 CPU 竞争 . 技术点41 内存交换 技术点42 磁盘健康 技术点43 网络 6.3 可视化 技术点44 提取并可视化...
9.3.4 其他Mahout clustering 算法 .9.4 本章小结第5 部分 驯服大象10 深入解析 Hive10.1 Hive 基础10.1.1 安装10.1.2 元存储10.1.3 数据库、表、分区和存储10.1.4 数据模型10.1.5 查询...
三、根据要求写出SQL 表A结构如下: Member_ID (用户的ID,字符型) Log_time (用户访问页面时间,日期型(只有一天的数据)) URL (访问的页面地址,字符型) 要求:提取出每个用户访问的第一个URL(按时间最早...
索引文本收集一个简单的实用程序,用于使用 Lucene 索引几个重要的文本集合并提取帖子(如有必要)。 创建它是为了生成数据集以测试快速检索算法: : 不带术语提取帖子:您可以加载 2d 术语的帖子,但您不知道该术语...
本项目利用Java swing技术制作爬虫界面,采用广度优先算法实现网页的URL提取,下载到本地以日志形式保存,(移植时注意修改保存路径),然后通过另一部分对所需关键字高亮处理。学校课程设计作业,有不足之处请多多...
所有数据均从的确网站中提取,并使用“确实”搜索字词分析来改善搜索位置和发现帖子。 国家搜索很难。 有用于德国(_de)和荷兰(_nl)的算法笔记本 指标 尽管仍反映出重复提及的“重要性”,但单个技能术语是根据...