/HtmlParser

网页爬虫解析模块要实现两大功能:1.从页面中提取出子链接,加入到爬取url队列中;2.解析网页内容,与主题进行相关度计算。

Primary LanguageJava

HtmlParser

一、子链接的提取:

HtmlLinkParser.extractLinks

做页面子链接提取的基本思路是:

  1. 用被提取的网页的url实例化一个Parser
  2. 实例化Filter,设置页面过滤条件——只获取a标签与frame标签的内容
  3. 用Parser提取页面中所有通过Filter的结点,得到NodeList
  4. 遍历NodeList,调用Node的相应方法得到其中的链接,加入子链接的集合
  5. 返回子链接集合

二、解析网页内容:

基本思路:

  1. 读取html文件,获得页面编码,获得String格式的文件内容
  2. 用页面编码实例化html文件的Parser
  3. 对需要提取的结点设置相应的Filter
  4. 根据给定的Filter,用Parser解析html文件
  5. 根据给定的Filter,用Parser解析html文件

三、读者需要注意两点:

1、 用BufferedReader读取文件是需要编码方式的,但是第一次读取我们必然不知道网页的编码。好在网页对于编码的描述在html语言框架中,我们用默认的编码方式读取文件就可以获取编码。但这个读取的文件的文本内容可能因为编码不正确而产生乱码,所以得到编码后,我们应使用得到的编码再实例化一个BufferedReader读取文件,这样得到的文件就是正确的了(除非网页本身给的编码就不对)。 获得正确的编码对于解析网页内容是非常重要的,而网络上什么样的网页都有,我推荐使用比较基础、可靠的方法获得编码,我使用的是正则匹配。 举个例子: 对编码的描述之一:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>

对编码的描述之二:

<meta charset="utf-8"/>

2、不熟悉html的读者可能有所不知的作用,来看看博客园首页的源码:

<meta name="keywords" content="开发者,博客园,开发者,程序猿,程序媛,极客,编程,代码,开源,IT网站,Developer,Programmer,Coder,Geek,技术社区" />
<meta name="description" content="博客园是一个面向开发者的知识分享社区。自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益。博客园的使命是帮助开发者用代码改变世界。" />

这两类标签的很好的描述了网页的内容。

3、由于网页的正文通常是一段最长的纯文本内容,所以当我们得到一个p,li,ul标签的纯文本后,我们可以通过判断字符串的长度来得到网页的正文。 对页面大量的信息进行处理是很费时的,页面的title标签和meta标签中往往有对网页内容最精炼的描述,开发者应该考虑性能与代价。