基于 HTMLParser 信息提取的网络爬虫设计
郑力明,男,博士,副教授,研究方向:计算机网络与通信。易平,男,硕士研究生,研究方向:计算机
网络与通信。
基于HTMLParser 信息提取的网络爬虫设计
Design of Crawler Based on HTML Parser Information Extraction
(暨南大学)郑力明,易平
(Jinan University )ZHENG Li-Ming, YI Ping
摘要:无论是通用搜索还是垂直搜索,其关键的核心技术之一就是网络爬虫的设计。本文结合
HTMLParser 信息提取方法,对生活类垂直搜索引擎中网络爬虫进行了详细研究。通过深入分析生活类
网站网址的树形结构的构架,开发了收集种子页面URL 的模拟搜索器,并基于HTMLParser 的信息提取
方法,从种子页面中提取出与生活类主题相关的目标URL。经实验测试证明该爬虫的爬准率达
93.552%,爬全率达96.720%,表明该网络爬虫是有效的,达到中等规模的垂直搜索企业级应用
的要求。
关键词:网络爬虫;垂直搜索; HTMLParser
中图分类号:TP393 文献标识码:A
Abstract :Whether general search engine or vertical search engine, the design of web crawler is the core
technology. In this article, a novel system of life-theme web crawler based on HTMLParser information
extraction is thoroughly studied. In this system, a simulation searcher is designed for collecting the seed
URL by analyzing tree structure of life-theme website, then, based on the discussion of HTMLParser
information extraction, the target URL that relate to life-theme is extracted from the seed pages. Empirical
studies show that the Pr 93.552%ecision = and the Re 96.720%call =, proving its effectiveness
and achieving requirements for general enterprise-level application of vertical search engine. Key words :web crawler; vertical search engine;HTMLParser
1 引言
随着互联网网页数量的不断增长,搜索引擎得到了蓬勃的发展。而一个搜索引擎系
统性能的优劣很大程度上取决于其抓取页面的网络爬虫的设计。但多元化信息的不断增
长,使得通用的搜索引擎已经不能满足人们对个性化信息检索服务的需求[1]。因此高效
率的网络爬虫的设计成为了各搜索引擎的主要技术挑战之一
[2][3]。 网络爬虫种类很多,如有基于全文搜索的网络爬虫[4]
,聚类网络爬虫[5],主题网络爬虫[6],基于本体的网络爬虫[7]等。随着垂直搜索的蓬勃发展,基于特定主题的网络爬虫
成为当前研究的热点之一。其中关系到百姓衣食住行的生活类垂直搜索更是处于垂直搜
索的前沿,甚至成了垂直搜索的代名词。本文就是针对生活类网站的特点结合
HtmlParser 的信息提及策略设计网络爬虫。
2
系统模型
图1 基于HTMLParser 信息提取的网络爬虫系统构架
如图1所示首先针对生活类网站设计一个模拟搜索器,通过模拟生活类行业网站内
的站内搜索将种子页面URL 插入到种子队列Seed_Url 表中,让爬行器Crawler 对其进
行抓取,并将种子页面放入缓存服务器,再通过HTMLParser 信息提取方法,从种子页
面中提取出目标URL存入Target_Url表,爬行器Crawler会检测Target_Url中是否包含未抓取的页面,若有未抓取的页面,就从Internet服务器中对其进行抓取并保存到页面服务器。
3 HtmlParser信息提取策略
3.1网址模拟搜索器
随着动态网站开发技术的发展,ASP,JSP,PHP等都采用了页面参数传递的机制获得用户输入的参数信息。因此几乎所有网址都以不同的参数命名,并以树形结构来构架[8]。每个树的节点就是一个文件夹,各个“树叶”即是页面。文献[8]中用此方法成功地解决了判断页面是否为新闻页面的问题。而对于生活类网站,大多数都有站内搜索,这些搜索正是使用这种参数传递的方式接受不同的参数进行查询。生活类网址命名树形结构图如图2所示,这类网站基本上都由城市(city),分类(type),页面数(page)等其他不同参数构成,或者直接由这些基本参数为文件夹命名。因此,可以通过设置不同网址参数模拟搜索出与生活相关的页面列表,即模拟搜索器,从而过滤掉不相关的页面。并建立Seed_Url表将上述种子页面的URL插入到该URL队列。
图2 生活类网址树形结构
3.2 Url表队列的建立
当开始要抓取种子页面时,就要通过网址模拟搜索器将种子页面的URL插入到Seed_Url队列中,其表结构如表1所示,将url字段设为主键,主要是为了防止重复链接的出现[4],而如果页面已经被抓取,就会在相应记录的urlDesc字段中插入“readed”,
表1 Seed_Url表结构
来标识该URL已经被抓取。而从Seed_Url表中抓取页面后,对其进行解析所获得的目标页面的URL将存储在Target_Url表中。其数据表结构与Seed_Url表一样。爬行器Crawler会自动检测该表中的URL队列是否包含UrlDesc=Null的记录,若有就从该记录中调出URL送入爬行器Crawler进行抓取,并将页面存入页面服务器。
3.3 HtmlParser提取链接信息
当从Seed_Url表的URL队列中抓取种子Html页面后,就对其进行解析,提取出目标页面URL链接插入target_Url表中。这是整个网络爬虫的核心之一。本文主要是利
用开源的Java库HTMLParser[9],对页面的Html代码进行分析,从中提取出目标链接。其主要原理是通过将访问的Html页面中的文本,注释,标签等节点转换成线性的节点,从而提取出嵌套在该节点中的信息[10]。其代码如下:
private List parserUrl(Parser parser) {
// 根据node名与该标签包含的属性值通过AndFilter截取该节点所包含的内容 NodeFilter filter = new AndFilter(new TagNameFilter("node"),
new HasAttributeFilter("attribute", "value"));
// 建立列表保存提取出来的Url
List urlList = new ArrayList();
// 对满足该过滤条件的页面进行解析
NodeList nodeList=parser.parser(filter);
// 逐个按顺序取出满足条件的信息