`
wzhiju
  • 浏览: 141404 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用htmlCleaner 来做网页分析

阅读更多
最近在一个项目用到了从网页中提取正文信息,基于这个模块有很多专家学者讨论了各种各样的算法和网页提取工具。但有些算法,比如配置摸版和基于视觉的分析、块分析方法,有些复杂麻烦,有些针对性太强,况且网页类型各种各样,又没有一种统一的网页编写规范,因此处理上难免会差强人意。
曾经用htmlParse 做过网页信息的提取,但对一些不太规范的网页提取效果不太理想。最近接触到了htmlCleaner ,感觉实用性很强,而且非常容易上手。
总结起来大概会用到得主要有以下几个步骤:
1. HtmlCleaner cleaner = new HtmlCleaner();
2. TagNode node = cleaner.clean(new File(fileRoot), String defultCharSet);//在这一步骤中,得到经过基本处理后的一颗html 树,其中,fileRoot 为 保存的html的页面地址,defultCharSet 词程序的默认的分析编码,因为网页的编码格式会有几种,必须用相应的格式进行分析提取,否则乱码。Clean方法中参数,可以是文件,可以是url,可以是字符串内容。
//按xpath提取
3. Object[] metaKeyWord = node.evaluateXPath("/head/meta[@name='"
+ keyWord + "']");// 利用xpath取出meta 中的keyword,要求具有一定的xpath 知识基础。
4. if (metaKeyWord.length != 0) {
String stringOfMetaKeyWord = (((TagNode) metaKeyWord[0])
.getAttributeByName("content"));//提取出meta中的关键词
}
5. //按tag提取
6. Object[] title = node.getElementsByName("title", true);
if(title.length!=0){
String stringOfTitle = (((TagNode) title[0]).getText()).toString();
}
在我的应用中,我把htmlCleaner的用途分为两种,一种做特定的、有针对性的网页信息的提取,另一种做网页正文的提取。
对于第一种,就举我遇到的一个问题作为例子吧。因为在做网页分析时,要考虑到编码的问题,网页的编码格式与预设分析的编码不一致,则提取失败。因此必须要先提取出网页的编码,然后判断是否与自己设定的一致,不一致的话,按照新的编码格式重新进行分析提取。例如,TagNode node = cleaner.clean(new File(fileRoot), “gb2312”) , 在程序中用的是gb2312,而一篇网页的编码是 utf-8 ,那要首先根据Xpath 进行特定内容的提取(也就是你已经知道它在哪),提取网页编码的xpath 路径描述为: "/head/meta[@http-equiv='Content-Type']";用TagNode 中的evaluateXPath 方法便可提取出来。当然,按照此方法的理论分析,还可以应用此性质来做一些某些网站上的特定的信息的提取、定制。比如天气预报、新闻等等。但要熟练掌握Xpath的语法,至关重要。经典的xpath教程,网上有很多,而且例子也比较全,这里就不多在描述,但有一点要注意,htmlCleaner 对Xpath 仅仅是部分的语法支持,有些xpath 不能被完全识别,大家可以下载xpath的api ,定义自己的xpath 即可。
对于第二种,就说一下我在处理类似内容时的具体思路吧。(总的来看,网页提取效果还是蛮不错的,最起码对于我的应用而言,足矣。之所以要在这分享一下,是因为自己也走过了不少弯路,看过多人的博客和所谓的技术文章)网页中主题内容,成块的文字描述一般都是用<p>来标示,当然更有一些用<tr> ,更有甚者直接扔在<div>中,对于此,采用了从细到粗,逐步删除的方法。首先根据标签或者xpath 路径 ,提取出无用的html描述语言,比如<script> 、<style>等等,然后将其删除,方法如下。

Object[] nsscript = node.evaluateXPath("//script");
for (Object tt : nsscript) {
((TagNode) tt).removeFromTree();
}
(在xpath中,// 代表所有的script 标签结点,即一个TagNode对象)
然后,利用TagNode 的evaluateXPath 方法,只提取<body>中的链接,图像信息和文章。”/body//a”  “/body//img” “/body//p” ,同样的方法将其从Tree中删除,以免影响后续的提取结果。如此便可提取仅在<div>中定义的文字了,要注意的是提取的xpath是”/body/div”,只提取一层,以免重复。

Object[] nsdiv_2 = node.evaluateXPath("/body/div");
for (int j = 0; j < nsdiv_2.length; j++) {
if (j == nsdiv_2.length - 1) {
TagNode t = (TagNode) nsdiv_2[j];
t.removeFromTree();
}
}
此外在这一步骤之前,最好将nsdiv_2 中的最后一个内容删除,因为基本上是网页的root,没有什么用处。
怎么样,很简单吧,这只是一个简单的网页提取,当然要想更加精确,从分析DOM的方向入手,也是可以的。htmlCleaner,也提供了相关的方法和功能。如下一个简单的Demo。

public class HtmlClean {

    public void cleanHtml(String htmlurl, String xmlurl) {
        try {
            long start = System.currentTimeMillis();

            HtmlCleaner cleaner = new HtmlCleaner();
            CleanerProperties props = cleaner.getProperties();
            props.setUseCdataForScriptAndStyle(true);
            props.setRecognizeUnicodeChars(true);
            props.setUseEmptyElementTags(true);
            props.setAdvancedXmlEscape(true);
            props.setTranslateSpecialEntities(true);
            props.setBooleanAttributeValues("empty");

            TagNode node = cleaner.clean(new File(htmlurl),"utf-8");

            System.out.println("vreme:" + (System.currentTimeMillis() - start));

            new PrettyXmlSerializer(props).writeXmlToFile(node, xmlurl,"utf-8");

            System.out.println("vreme:" + (System.currentTimeMillis() - start));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        HtmlClean clean = new HtmlClean();
        clean.cleanHtml("html/1.htm", "1.xml");
    }
}
如此,便于后续的结构化分析和提取。以上仅仅是个人之言,难免有所欠缺和错误,还望大家能够批评、雅正。谢谢。
分享到:
评论

相关推荐

    网页解析工具HTMLCleaner

    HTMLCleaner是一款强大的网页解析工具,它主要用于帮助开发者和数据分析师高效地提取和处理网页中的信息。这款工具的核心功能在于其能够清晰地展示出网页中各个HTML元素之间的关系,使得用户能够更容易理解和操作...

    网页爬虫demo 带htmlcleaner jar包

    本资源提供了一个基于HTMLCleaner的网页爬虫DEMO,帮助初学者理解如何使用HTMLCleaner这个库来提取网页内容。 HTMLCleaner是一款Java库,专门设计用于清理和解析HTML和XML文档。它可以帮助处理不规范的HTML,将其...

    HtmlCleaner

    HtmlCleaner是一个开源的Java语言的Html文档解析器。 HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档。...然而,用户可以提供自定义tag和规则组来进行过滤和匹配。

    htmlcleaner html解析器

    在分析HTML内容时,尤其是在进行数据挖掘、爬虫项目或者需要从非标准源提取结构化信息时,HTMLCleaner显得尤为有用。 **HTMLCleaner的主要功能:** 1. **错误容忍性**:HTMLCleaner能够处理各种HTML语法错误,如未...

    HTMLcleaner

    例如,一个简单的使用案例是提取网页上的所有链接(`&lt;a&gt;`标签),你可以创建一个HTMLcleaner实例,设置规则保留`&lt;a&gt;`标签,然后遍历DOM树找到所有的链接元素,获取其`href`属性。 总的来说,HTMLcleaner是一个强大...

    HtmlCleaner-JAVA爬虫--编写第一个网络爬虫程序

    下面是一个简单的例子,展示了如何使用HTMLCleaner来解析网页: ```java import org.htmlcleaner.CleanerProperties; import org.htmlcleaner.HtmlCleaner; import org.htmlcleaner.TagNode; public class Spider...

    HtmlCleaner 用法

    1. **数据抓取**:HtmlCleaner 可用于网页爬虫项目,提取页面上的特定数据,如价格、评论等。 2. **HTML 清理**:它可以清理不规范的 HTML,使其符合标准,便于进一步处理或存储。 3. **模板引擎**:结合其他技术...

    HtmlCleaner2.6.1 API (英文) 及 JAR Library

    HtmlCleaner2.6.1 API (英文) 及 JAR Library API LINK: http://htmlcleaner.sourceforge.net/doc/index.html

    htmlcleaner-2.2.4.jar

    网络爬虫htmlcleaner的jar包

    HtmlCleaner2.1API参考手册.chm

    HtmlCleaner2.1API参考手册.chm HtmlCleaner是一个把html解析为XML文档的Java程序库。 我试过,这是java世界中最快、最好、最小、最强大的Html解析库。 可以解析为DOM对象,然后使用其他的xml分析器进行分析。

    htmlcleaner,活跃的.zip

    HTMLCleaner的另一个重要特性是支持CSS选择器,这使得用户可以通过CSS表达式来查找和修改DOM元素。这大大简化了对HTML文档内容的操作,尤其是进行数据提取或内容替换时。 为了便于使用,HTMLCleaner提供了Java API...

    htmlcleaner html解析器2.2版

    htmlcleaner html解析器2.2版 ,解析速度很快的,比htmlparser1使用还速度快

    htmlcleaner

    在Web开发中,我们经常遇到不规范或者带有错误的HTML代码,HTMLCleaner能够帮助我们处理这些不规则的结构,将其转换为标准的DOM(Document Object Model)树,便于进一步的处理和分析。 HTML网页解析是Web开发中的...

    htmlcleaner-2.8.jar

    Java解析HTML利器 htmlcleaner2.8

    HtmlCleaner使用说明文档

    HtmlCleaner是一个开源的HTML解析库,专门用于...总的来说,HtmlCleaner是一个功能强大的HTML清理工具,对于需要处理大量网页数据的IT专业人员来说,掌握它的使用方法能够显著提高工作效率,确保数据的准确性和可用性。

    HTMLCleaner(HTML代码优化工具)V1.0官方英文免费版

    HTMLCleaner通过智能分析和处理,能有效地去除这些无用信息,使HTML代码更加整洁、规范,符合W3C标准。 HTML Cleaner的主要功能包括: 1. **清理空格**:自动删除多余的空格,使得代码紧凑,减少文件大小。 2. **...

    页面正文提取htmlcleaner-2.8.jar

    3. **正文提取**:HtmlCleaner能有效地识别和提取网页的主要正文内容,这对于新闻聚合、搜索引擎优化(SEO)以及内容分析等应用非常有用。 4. **简单易用的API**:HtmlCleaner提供了简单的API供开发者调用,使得...

    htmlcleaner2_1.jar

    html解析工具,支持xpath,简单方便

    htmlcleaner-2.22_html_XSS_

    XSS攻击是一种常见的网络安全问题,通过注入恶意脚本到网页,攻击者可以窃取用户的敏感信息,如Cookie、会话ID等。 在标题"htmlcleaner-2.22_html_XSS_"中,"htmlcleaner"是工具的名字,"2.22"是版本号,"html"代表...

    htmlcleaner使用方法及xpath语法初探

    HtmlCleaner常用于数据挖掘、网页抓取、内容分析等场景,特别是在需要处理非标准或包含错误的HTML时,其优势尤为明显。XPath的使用则使我们能够精确地定位到HTML文档中的特定信息,简化了数据抽取的过程。 总结来说...

Global site tag (gtag.js) - Google Analytics