`
famoushz
  • 浏览: 2963591 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HtmlParser的使用

阅读更多

HtmlParser的使用


在对抓取来的页面进行分析时,我们可以使用htmlParser工具:

以下將dmeo簡單的程式範例

Demo1

public static void main(String[] args) throws Exception

{
//不完整格式的HTML訊息
String html = "我們是害蟲<table>1234567890<table>lk你好中國";
Parser parser = Parser.createParser(new String(html.getBytes(),"8859_1"));
Node [] tables = parser.extractAllNodesThatAre (TableTag.class);
for (int i = 0; i < tables.length; i++) {
TableTag tableTag = (TableTag)tables[i];
//列印出結束標籤所在的未知
System.out.println("END POS:"+tableTag.getEndTag().getEndPosition());
//補齊未結束的標籤並列印
System.out.println(new String(tableTag.toHtml().getBytes("8859_1")));
}
}

Demo2

/**
* 獲取HTML的預覽訊息,其中content是對象的一個屬性,也就是待處理的HTML內容
* @return
*/

public String getPreviewContent(){

//截取前N個字符
String ct = StringUtils.left(content,MAX_COUNT);

//對一些未完成的標籤先補齊,避免出現例如<tab這樣的標籤
if(ct!=null content!=null) {
int idx2 = ct.lastIndexOf('>');
int idx1 = ct.lastIndexOf('<');
if((idx2==-1 idx1>=0) || idx1 > idx2) {
String ct2 = content.substring(ct.length());
int idx3 = ct2.indexOf('>');
if(idx3!=-1 idx3<(MAX_COUNT2-MAX_COUNT)) {
ct += content.substring(ct.length(),ct.length()+idx3+1);
}
}
}

//對於一些頁面嵌入了ActiveX對象進行預處理
if(ct!=null content!=null) {
int idx2 = ct.toLowerCase().lastIndexOf("</object>");
int idx1 = ct.toLowerCase().lastIndexOf("<object");
if((idx2==-1 idx1>=0) || idx1 > idx2) {
String ct2 = content.substring(ct.length()).toLowerCase();
int idx3 = ct2.indexOf("</object>");
if(idx3!=-1)
ct += content.substring(ct.length(),ct.length()+idx3+9);
else
ct = ct.substring(0,idx1);
}
}
if(ct!=null content!=null) {
Parser parser = Parser.createParser(new String(ct.getBytes(),ISO8859_1));

//中文訊息必須轉碼後方可傳入

Node [] tables = parser.extractAllNodesThatAre (TableTag.class);
if(tables!=null tables.lengtd>0) {
TableTag tableTag = (TableTag)tables[0];
ct = ct.substring(0,tableTag.getStartPosition())
+ new String(tableTag.toHtml().getBytes(ISO8859_1));

//處理後的數據轉回GBK的編碼
}
}
return ct;
}




運用HTMLParser API 提供三種方式之HTML Tag的擷取

* 方法一

// 使用 ObjectFindingVisitor 配合不同的 Tag.class 分析網頁
try {
ImageTag imgLink;
ObjectFindingVisitor visitor = new ObjectFindingVisitorImageTag.class);
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
parser.visitAllNodesWith(visitor);
Node[] nodes = visitor.getTags();
for (int i = 0; i < nodes.length; i++) {
// ImageTag
imgLink = (ImageTag) nodes[i];
// "http://www.msn.com.tw/webinclude/zh-tw/images/msn.gif" => ImageURL
System.out.println("ImageURL = " + imgLink.getImageURL());
// "/webinclude/zh-tw/images/msn.gif" => ImageLocation
System.out.println("ImageLocation = " + imgLink.extractImageLocn());
// SRC value
System.out.println("SRC = " + imgLink.getAttribute("SRC"));
}
} catch (Exception e) {
e.printStackTrace();
}

* 方法二

// 使用不同的 NodeFilter 分析網頁
try {
NodeFilter filter = new TagNameFilter("IMG");
NodeFilter filter1 = new NodeClassFilter(ImageTag.class);
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.elementAt(i).toHtml());
}
} catch (Exception e) {
e.printStackTrace();
}

* 方法三

// 直接使用 Tag.class 分析網頁
try {
Parser parser = new Parser();
parser.seturl(/url);
parser.setEncoding(parser.getEncoding());
Node[] nodes = parser.extractAllNodesThatAre(ImageTag.class);
for (int i = 0; i < nodes.length; i++) {
ImageTag imageTag = (ImageTag) nodes[i];
System.out.println(imageTag.getImageURL());
}
} catch (Exception e) {
e.printStackTrace();
}

分享到:
评论

相关推荐

    HTMLParser 使用举例

    HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...

    JAVA htmlparser 使用实例

    ### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...

    C# HtmlParser使用小实例

    通过阅读提供的`C# HtmlParser使用实例.doc`文档,你可以深入了解如何利用这个库来满足你的具体需求。同时,`winsta.Htmlparser.chm`帮助文档是宝贵的参考资料,包含了详细的API说明和技术细节。记住,理解并熟练...

    HTMLParser使用文档和jar包

    本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...

    HTMLParser使用详解.doc

    HTMLParser使用详解.doc如何利用JAVA实现对html的解析

    htmlparser使用简单讲解

    以下是一个使用HTMLParser的简单示例,展示了如何从文件或URL读取HTML内容并进行解析: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java....

    HTMLParser使用详解

    ### HTMLParser 使用详解 #### 一、HTMLParser简介与核心模块 HTMLParser 是一款轻量级的HTML解析库,主要用于从HTML文档中提取所需的信息。它具有高效、易用的特点,但官方文档较少,需要使用者根据实践进行探索...

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

    1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...

    Java正则表达式入门 + HTMLParser使用详解

    除了正则表达式,本话题还提到了HTMLParser的使用。HTMLParser是一个Java库,用于解析HTML文档,提取或修改数据。它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用HTMLParser,开发者可以方便...

    网络爬虫 HTMLParser 使用指南

    综上所述,网络爬虫开发者在使用HTMLParser进行开发时,需要了解它的基本原理、核心类和构造函数、调试工具的使用、页面编码设置方法、以及一些基本的代码实践。同时,开发者应该具备良好的问题解决和代码调试能力,...

    htmlparser 使用指南 入门 必读htmlparser 使用指南 入门 必读htmlparser 使用指南 入门 必读

    HTMLParser的核心使用场景主要有两个:提取(extraction)和转换(transformation)。提取是指从网页中抽取数据,而转换则是指修改或创建新的HTML内容。1.4版本的HTMLParser在转换领域有了显著的改进,简化了标签的创建...

    解析htmlparser的所有jar包

    5. **兼容性与扩展性**:HTMLParser与其他Java库兼容良好,如JDOM、DOM4J等,可以方便地与其他XML处理工具结合使用。此外,它的API设计使得扩展功能相对简单。 6. **错误处理**:HTMLParser具有一定的容错能力,...

    htmlparser网页分析

    4. 使用示例:在"HTMLParser使用详解-Node内容.doc"中,可能详细介绍了如何创建和配置解析器对象,设置解析事件处理器,以及如何通过遍历节点来提取或修改HTML内容。例如,可以使用`TagStart`事件捕获元素开始,`...

    Java正则表达式入门 + HTMLParser使用详解.ppt

    使用HTMLParser,开发者可以通过事件驱动的方式解析HTML,监听并响应特定的HTML元素和属性,从而实现对HTML内容的定制化处理。 结合两者,Java正则表达式可以与HTMLParser一起工作,帮助在解析HTML时进行更复杂的...

    htmlparser的jar包

    在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...

    正则表达式+_HTMLParser使用详解-2010-03-21

    4. **分组与反向引用**:使用圆括号`()`可以将一部分表达式分组,方便多次使用或获取子匹配结果。反向引用如`\1`代表第一个分组匹配到的内容。 5. **预查否定**:`^`在方括号`[]`内表示否定,如`[^abc]`匹配非a、b...

Global site tag (gtag.js) - Google Analytics