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

jsoup 和nekohtml,htmlparser解析html

阅读更多
仅以此文章表达介绍下将html解析成纯文本的多种方式
1.jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。
可参考:http://www.iteye.com/topic/1010581

	public  void parse(String urlStr) {
		// 返回结果初始化。

		Document doc = null;
		try {
			doc = Jsoup
					.connect(urlStr)
					.userAgent(
							"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.15)") // 设置User-Agent
					.timeout(5000) // 设置连接超时时间
					.get();
		} catch (MalformedURLException e) {
			log.error( e);
			return ;
		} catch (IOException e) {
			if (e instanceof SocketTimeoutException) {
				log.error( e);
                                return ;
			}
			if(e instanceof UnknownHostException){
				log.error(e);
				return ;
			}
			log.error( e);
			return ;
		}
		system.out.println(doc.title());
		Element head = doc.head();
		Elements metas = head.select("meta");
		for (Element meta : metas) {
			String content = meta.attr("content");
			if ("content-type".equalsIgnoreCase(meta.attr("http-equiv"))
					&& !StringUtils.startsWith(content, "text/html")) {
				log.debug( urlStr);
				return ;
			}
			if ("description".equalsIgnoreCase(meta.attr("name"))) {
				system.out.println(meta.attr("content"));
			}
		}
		Element body = doc.body();
		for (Element img : body.getElementsByTag("img")) {
			String imageUrl = img.attr("abs:src");//获得绝对路径
			for (String suffix : IMAGE_TYPE_ARRAY) {
				if(imageUrl.indexOf("?")>0){
					imageUrl=imageUrl.substring(0,imageUrl.indexOf("?"));
				}
				if (StringUtils.endsWithIgnoreCase(imageUrl, suffix)) {
					imgSrcs.add(imageUrl);
					break;
				}
			}
		}
	}



2 nekohtml
import java.io.BufferedReader;
import java.io.FileReader;

import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;


public class Demo {
public static String TextExtractor(Node root){
   //若是文本节点的话,直接返回
   if (root.getNodeType() == Node.TEXT_NODE) {
    return root.getNodeValue().trim();
   }
   if(root.getNodeType() == Node.ELEMENT_NODE) {
    Element elmt = (Element) root;
    //抛弃脚本
    if (elmt.getTagName().equals("STYLE")
      || elmt.getTagName().equals("SCRIPT"))
     return "";
   
    NodeList children = elmt.getChildNodes();
    StringBuilder text = new StringBuilder();
    for (int i = 0; i < children.getLength(); i++) {
     text.append(TextExtractor(children.item(i)));
    }
    return text.toString();
   }
   //对其它类型的节点,返回空值
   return "";
}
public static void main(String[] args) throws Exception{
   //生成html parser
   DOMParser parser = new DOMParser();
   //设置网页的默认编码
   parser.setProperty(
     "http://cyberneko.org/html/properties/default-encoding ",
     "gb18030");
   //input file
   BufferedReader in = new BufferedReader(new FileReader("input.htm"));
   parser.parse(new InputSource(in));
   Document doc = parser.getDocument();
   //获得body节点,以此为根,计算其文本内容
   Node body = doc.getElementsByTagName("BODY").item(0);
   System.out.println(TextExtractor(body));
}
}


另外强调下,在用nekohtml对html页面进行解析的时候,经常会碰到&nbsp这样的符号经解析之后变成了?,在网上搜索了下答案之后发现了解决方案。
方案一:先将&nbsp;用空字符串取代。
方案二:原来neko能够自动对这种类型的HTML字符实体进行分析,但是资源文件却不包含对&nbsp;的定义。在nekohtml.jar中找到了它使用的资源文件HTMLlat1.properties,在其中加入了一行: nbsp=\u00a0,问题就解决了。


3.htmlparser
  用法差不多。

好吧,有人总结的更全面
http://blessed24.iteye.com/blog/865197
分享到:
评论

相关推荐

    HttpClient ,jsoup和 HtmlParser ,htmllexer实现简易爬虫用到的jar包

    总的来说,HttpClient负责网络通信,jsoup处理HTML内容,而HtmlParser和htmllexer则用于更精细的HTML解析工作。了解和掌握这些库的使用,对于提升Java爬虫的开发效率和质量至关重要。在实践中,根据具体需求选择合适...

    jsoup:Java HTML 解析器

    jsoup:Java HTML 解析器 jsoup是一个用于处理现实世界 HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器,提供了一个非常方便的 API,用于获取 URL 以及提取和操作数据。 jsoup实现了WHATWG HTML5规范...

    jsoup Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容

    总结来说,jsoup是Java开发人员处理HTML的得力工具,无论是在网页抓取、数据分析,还是在构建需要解析和操作HTML的应用场景下,都发挥着重要的作用。它简化了HTML处理的过程,提高了开发效率,是Java生态系统中的一...

    NekoHtml解析 html 文件

    NekoHtml是一个开源的、Java实现的...学习和掌握如何使用NekoHtml,可以帮助开发者更有效地解析和操作HTML文档,提升工作效率。同时,通过研究提供的"ParseHtmlFiles",可以加深对NekoHtml工作原理和实际应用的理解。

    jsoupAPI解析html

    **jsoup API解析HTML** jsoup是一个非常强大的Java库,专为处理真实世界的HTML而设计。它提供了方便的API,用于提取和操作数据,使用DOM,CSS和jQuery-like方法。在深入jsoup的API之前,我们需要理解HTML解析的重要...

    使用Jsoup对Html文件解析

    Jsoup是一个Java库,它提供了强大的功能来解析HTML,提取和操作数据。这个库的设计理念是使处理HTML变得简单,类似于jQuery的API,使得开发者能够方便地访问和操作HTML元素。在本文中,我们将深入探讨如何使用Jsoup...

    使用Jsoup解析html网页

    Jsoup以浏览器的方式解析HTML,使得我们可以方便地通过CSS选择器来查找和操作元素,极大地简化了这一过程。 ### Jsoup的基本概念 1. **Jsoup连接(Connection)**:使用Jsoup的第一步是建立到目标网页的连接。这...

    Android使用Jsoup技术解析HTML

    Jsoup提供了一种简单、安全且有效的方法来解析和操作HTML文档,使得开发者能够轻松地从网页中提取结构化数据。 ### 1. Jsoup的基本概念 Jsoup的核心功能是解析HTML文档,并将其转化为一个DOM(Document Object ...

    HttpClient + Jsoup 模拟登陆,解析HTML,信息筛选(广工图书馆)

    这两个库都是Java开发者常用来处理HTTP请求和解析HTML文档的强大工具。 首先,让我们了解**HttpClient**。HttpClient是Apache软件基金会的一个开源项目,它提供了丰富的API来处理HTTP协议。通过HttpClient,我们...

    jsoup在java中解析dom

    jsoup在java代码中高效解析html字符串为dom结构,并可实现对dom结构的灵活操作,特别适合移动端返回字段为html形式的解析过滤处理

    Java解析HTML之NekoHTML

    在Java中解析HTML时,一个常用的库是NekoHTML,它是一个开源项目,主要用于构建和解析不完整的、错误的HTML文档。本篇文章将深入探讨NekoHTML的工作原理以及如何在Java中使用它。 NekoHTML是由Apache Software ...

    Jsoup解析html的示例

    总之,Jsoup为Android开发者提供了一种高效、便捷的方式来解析和操作HTML,从而在各种应用场景中实现数据的提取和处理。通过熟练掌握Jsoup,开发者可以轻松地从网页中获取有价值的信息,并将其融入到Android应用程序...

    Jsoup解析html+xml

    Jsoup是一款非常强大的Java库,专门用于处理HTML和XML文档,提供了一系列简洁的API来抓取、解析、修改以及格式化这些文档。在现代Web开发中,数据抓取和网页解析是常见需求,Jsoup凭借其高效且易用的特性,成为...

    使用Jsoup解析HTML数据的Demo

    这是使用Jsoup解析HTML得到数据的一个小例子,具体的使用方法请参见我的博客:http://blog.csdn.net/ProgramChangesWorld/article/details/47134255

    用Jsoup解析html的所有jar包

    Jsoup是一款非常强大的Java库,专门用于处理HTML文档,提供了丰富的API来抓取、解析、修改和输出HTML内容。在Java开发中,如果你需要从网页上提取数据或者进行Web抓取,Jsoup是一个理想的选择。这个压缩包文件“用...

    jsoup解析HTML

    JSoup利用DOM模型来解析HTML,允许开发者通过节点遍历、查找和修改文档。 2. **CSS选择器**:JSoup支持CSS选择器,这使得能够以简洁的方式选取HTML元素。例如,`$("div.title")` 将选取所有类名为"tilte"的`&lt;div&gt;`...

    使用Jsoup库解析HTML、XML或URL链接中的DOM节点

    在压缩包文件"JsoupDemo"和"Jsoup"中,可能包含了使用Jsoup进行DOM解析的示例代码。这些代码通常会展示如何连接到URL,选择元素,提取数据,以及进行一些基本的DOM操作。通过阅读和运行这些示例,你可以更深入地了解...

    jsoup解析html所需包1.7.3

    JSoup是一款强大的Java库,专为处理和解析HTML文档而设计。它提供了简单易用的API,使开发者能够轻松地提取数据、操作DOM(文档对象模型)以及清理HTML。标题中的"jsoup解析html所需包1.7.3"表明我们将讨论的是JSoup...

    jsoup根据url解析html

    ### jsoup根据URL解析HTML ...总之,`jsoup`是一个强大的工具,可以帮助开发者轻松地解析和操作HTML文档。通过理解和应用最佳实践,可以更高效地利用这一工具来完成复杂的Web爬虫任务或其他相关项目。

    Jsoup解析html中文文档

    - **频繁更新**:相比于其他HTML解析工具如htmlparser,jsoup更为活跃,持续维护更新。 - **强大功能**:jsoup不仅能够解析HTML文档,还能通过DOM或CSS选择器来高效检索和操作数据。 - **易于集成**:其API设计友好...

Global site tag (gtag.js) - Google Analytics