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

使用htmlParser分析网页

阅读更多

关于这个工具的简介就不说了,这里只介绍其用法。

(一),来看它的API:

Packages
org.htmlparser                         
org.htmlparser.beans
org.htmlparser.filters
org.htmlparser.http
org.htmlparser.lexer
org.htmlparser.lexerapplications.thumbelina
org.htmlparser.nodes
org.htmlparser.parserapplications
org.htmlparser.parserapplications.filterbuilder
org.htmlparser.parserapplications.filterbuilder.layouts
org.htmlparser.parserapplications.filterbuilder.wrappers
org.htmlparser.sax
org.htmlparser.scanners
org.htmlparser.tags
org.htmlparser.util
org.htmlparser.util.sort
org.htmlparser.visitors

点击上面的链接,每一个类都有详细的方法和字段释义。在此,我们常用到的几个类是:Parser; Filter; Util; Node; Tags;

(二),使用htmlparser的最一般方法,可以分为下面几个步骤:

1)

和目标网页(目标网页可以是网络上的一个URL,也可以是一个本地的网页文件)建立连接;

2)

定义解析器(Parser),解析器可以设定要解析的目标页,可以设定解析页面时的编码;

3)

构造过滤器,htmlParser给我们提供的过滤器类型有很多,大致分为简单过滤器(TagNameFilter)和复合型过滤器(AndFilter),简单过滤器即过滤某个标签的名称或属性,复合过滤器可以包含多个简单过滤器,并对它进行逻辑运算;

4)

使用定义好的解析器和过滤器解析页面,此时返回给我们的是一个包含所有符合条件的Node数组;

5)

循环该数组,并对数组中的每一个节点进行解析(一般都是将这些节点转化为某一个具体的html标签),取得需要的节点属性。

(三),按照上面的步骤,可以做一个最简单的htmlParser解析的实例(假设我们解析百度首页中的超链接信息):

例程1 写道
package com.crawler;

import java.net.URL;
import java.net.URLConnection;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;

public class HtmlParserTest1 {

public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com");
URLConnection urlConn = url.openConnection();
Parser parser = new Parser(urlConn);
NodeFilter nodeFilter = new AndFilter(new TagNameFilter("a"),
new HasAttributeFilter("href"));
NodeList nodeList = parser.parse(nodeFilter);
NodeIterator it = nodeList.elements();
while (it.hasMoreNodes()) {
Node node = it.nextNode();
System.out.println(((LinkTag) node).getAttribute("href"));
}
}
}

 (四)如果只是实现常见的功能,了解了上面方法和步骤,然后查看其API,自然都可以做到了,但如果我们要做一些更高级的功能,就必须对这个工具进行扩展,由于htmlParser定义良好的接口,我们可以方便的写出自己想要的网页解析工具,在这里我举一个例子,假如我们要对WML(无线标记语言,常用于移动设备的web开发)进行解析,这里就涉及到一些新的标签,比如go,anchor,postfield等,同样,我给出一个简单的示例:

首先,这是我们的wml网页内容:test.wml 写道
<a href="http://www.iteye.com?cat_id=1">Javaeye</a>
或者:
<anchor>
Java自由人
<go href="http://www.iteye.com" method="get">
<postfield name="cat_id" value="1"/>
</go>
</anchor>

 

具体的解析代码,HyperLinkTrace.java 写道
package com.htmlParser;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.PrototypicalNodeFactory;
import org.htmlparser.tags.CompositeTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;

public class HyperLinkTrace {
public static void main(String[] args) throws Exception {
// 初始化HTMLParser
Parser parser = new Parser();
parser.setEncoding("8859_1");
parser.setInputHTML(getWmlContent());
// 注册新的结点解析器
PrototypicalNodeFactory factory = new PrototypicalNodeFactory();
factory.registerTag(new WmlGoTag());
parser.setNodeFactory(factory);
// 遍历符合条件的所有节点
NodeList nlist = parser.extractAllNodesThatMatch(lnkFilter);
for (int i = 0; i < nlist.size(); i++) {
CompositeTag node = (CompositeTag) nlist.elementAt(i);
if (node instanceof LinkTag) {
LinkTag link = (LinkTag) node;
System.out.println("LINK: \t" + link.getLink());
} else if (node instanceof WmlGoTag) {
WmlGoTag go = (WmlGoTag) node;
System.out.println("GO: \t" + go.getLink());
}
}
}

/**
* 获取测试的WML脚本内容
*
* @return
* @throws Exception
*/
static String getWmlContent() throws Exception {
File f = new File("test.wml");
BufferedReader in = new BufferedReader(new FileReader(f));
StringBuffer wml = new StringBuffer();
do {
String line = in.readLine();
if (line == null)
break;
if (wml.length() > 0)
wml.append("\r\n");
wml.append(line);
} while (true);
return wml.toString();
}

/**
* 解析出所有的链接,包括行为<a>与<go>
*/
static NodeFilter lnkFilter = new NodeFilter() {
public boolean accept(Node node) {
if (node instanceof WmlGoTag)
return true;
if (node instanceof LinkTag)
return true;
return false;
}
};

/**
* WML文档的GO标签解析器
*
* @author Winter Lau
*/
static class WmlGoTag extends CompositeTag {
private static final String[] mIds = new String[] { "GO" };
private static final String[] mEndTagEnders = new String[] { "ANCHOR" };

public String[] getIds() {
return (mIds);
}

public String[] getEnders() {
return (mIds);
}

public String[] getEndTagEnders() {
return (mEndTagEnders);
}

public String getLink() {
return super.getAttribute("href");
}

public String getMethod() {
return super.getAttribute("method");
}
}

}

 以上这个示例的来源是:http://www.ibm.com/developerworks/cn/opensource/os-htmlparser/

读完上面的文章应该对此用法有更深入的认识。

接下来,我还会写几篇文章对htmlParser的一些用法上细节做一介绍。

分享到:
评论

相关推荐

    HtmlParser提取网页信息的设计与实现

    本文将详细介绍如何利用HtmlParser这一开源工具来提取网页中的关键信息,并通过数据清洗将其存储到SQL数据库中,以便后续的数据分析和应用。 #### 二、HtmlParser概述 HtmlParser是一种轻量级、高效且易于使用的...

    htmlparser网页分析

    在网页分析中,HTMLParser扮演着核心角色,它能够帮助开发者有效地处理HTML源代码,提取所需的信息,甚至进行DOM(Document Object Model)操作。以下是对HTMLParser及其相关知识点的详细说明: 1. HTML解析:...

    使用HTMLParser解析网页,找出文章后下载保存

    本篇文章将深入探讨如何使用HTMLParser库来解析网页,查找文章内容,并将其下载保存。HTMLParser是Python标准库中的一个模块,专门用于解析HTML和XML文档。 首先,我们需要了解HTMLParser的基本用法。HTMLParser是...

    java利用htmlparser抓取网页数据

    总之,Java利用HTMLParser库可以有效地抓取和解析网页数据,为数据分析、信息监控等任务提供便利。通过不断学习和实践,你可以掌握更多高级技巧,实现更复杂的功能。记得在使用过程中遵守互联网道德,尊重网站的...

    htmlparser抓取网页内容

    而"需要使用的lib"则表明除了HTMLParser之外,可能还需要其他库,比如`urllib`或`requests`用于发送HTTP请求,`re`进行正则表达式匹配,甚至`pandas`用于数据清洗和分析。 总结来说,"htmlparser抓取网页内容"项目...

    HTMLParser提取网页超链接研究

    1. **加载HTML文档**:使用HTMLParser加载待分析的HTML文档。 2. **定义过滤器**:根据需求定义过滤器来筛选出包含超链接的HTML元素。 3. **提取超链接**:遍历匹配到的HTML元素,提取出其中的超链接。 下面是一个...

    java使用htmlparser提取网页纯文本例子

    【Java使用HTMLParser提取网页纯文本】\n\n在Java编程中,提取网页纯文本是一项常见的任务,尤其在数据抓取、信息分析等领域。HTMLParser是一个强大的Java库,专门用于解析HTML文档,提取其中的文本内容。下面我们将...

    基于htmlparser的网页爬虫和java调用excel代码

    总之,这个项目涵盖了HTML解析、网页爬虫和Excel文件操作等多个IT领域的核心技能,对于学习Java Web开发和数据分析的人员来说,是一个很好的实践案例。通过实际操作,不仅能提升技术能力,还能加深对数据获取和处理...

    htmlparser进行网页信息的抽取

    以下是对HTMLParser及其在网页信息抽取中应用的详细说明: 1. **HTMLParser基本概念**: - HTMLParser是一个开源的Java库,它提供了API来解析HTML文档,支持处理HTML标签、属性、文本等元素。 - 库中的主要类包括...

    Htmlparser 网页内容抓取java

    例如,你可以使用HTMLParser解析整个网页,然后通过XPath找到特定的元素,如所有的链接(`&lt;a&gt;`标签)。这在进行网络爬虫开发时非常有用,可以提取出网页中的所有链接,进行进一步的分析或者访问。 HTMLParser库还...

    HTMLParser提取网页内容

    可以使用HTMLParser库提供的API来遍历DOM树,查找这些元素并获取其文本内容。 例如,对于标题提取,可以遍历HTML中的所有`&lt;h1&gt;`到`&lt;h6&gt;`标签,然后收集它们的文本;对于正文,可以寻找段落标签或其他可能包含正文...

    基于HttpClient与HTMLParser 的网页正文提取

    3. 网页抓取和分析方法的实现:文章中提出的基于HttpClient与HTMLParser的网页抓取解析方法,结合了两者的优点,实现了快速且有效的网页内容抓取和正文提取。该方法能够针对特定的网页内容进行深入分析,并能够应对...

    Java使用HtmlParser实现简单的网络爬虫.zip

    本文将详细讲解如何运用Java语言结合HtmlParser库来构建一个基础的网络爬虫,以便从网页中获取所需信息。 首先,HtmlParser是一个开源的Java库,专门用于解析HTML文档。它提供了强大的DOM(文档对象模型)接口,...

    htmlparser实现从网页上抓取数据.doc

    本文将详细讲解如何使用Java的htmlparser库实现网页抓取,并探讨其核心概念和用法。 首先,从给定的代码示例中可以看出,这是一个简单的Java程序,用于从指定的URL抓取HTML内容并将其保存到本地文件。这个程序的...

    HtmlParser 网页分解dll

    在HtmlParser的场景中,它可能用于打包或解压包含HTML内容的文件,或者在下载网页时配合使用,以减少网络传输的数据量。 使用HtmlParser时,开发者需要了解一些基本概念,比如HTML解析器、DOM树、XPath表达式等。...

    HtmlParser

    使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...

    htmlparser实现从网页上抓取数据

    本文将详细介绍如何使用HTMLParser从网页上抓取数据,并通过一个具体的Java代码示例来演示其实现过程。 #### HTMLParser简介 HTMLParser是一个纯Java编写的HTML解析库,其最大的特点在于不需要依赖其他Java库即可...

    HTMLParser 使用文档、jar包、以及源码

    这使得HTMLParser不仅可以用于基本的标签提取,还能用于更复杂的网页数据抓取和分析。 总的来说,HTMLParser是一个功能丰富的HTML解析工具,对于需要处理HTML的Java开发者来说,它是一个强大且灵活的解决方案。通过...

    用htmlparser分析并抽取正文

    在本文档中,我们将深入探讨如何利用HTMLParser来分析和抽取正文,这是搜索引擎优化(SEO)和网页数据挖掘中的关键步骤。 正文抽取的主要目标是从HTML文档中提取出主要的文字内容,去除广告、脚本、样式和其他非...

Global site tag (gtag.js) - Google Analytics