atitit. java jsoup html table的读取解析 总结

1. 两个大的parser ,,,jsoup 跟个   htmlparser 1

2. 资料比较 1

3. jsoup越佳.. 1

4. 解析并提取 HTML 元素的模式( 选择器 and  DOM 方式 ) 2

5. html修改 2

6. 跟个htmlparse的比较 2

7. jsoup的用处 3

7.1. html解析 3

7.2. html修改 3

7.3. HTML 文档清理 3

8. code--读取解析表格2Lisp<Map> 3

html table的读取

1. 两个大的parser ,,,jsoup 跟个   htmlparser

2. 资料比较

jsoup  百度为您找到相关结果约321,000个

htmlparser 百度为您找到相关结果约113,000个

3. jsoup越佳..

运用 jsoup 对 HTML 文档进行解析和操作(比HTMLParser好)

Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTML 中攫取你所需的信息和?扩展 HTMLParser 对自定义标签的处理能力。但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了 jsoup 。

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

4. 解析并提取 HTML 元素的模式( 选择器 and  DOM 方式 )

这部分涉及一个 HTML 解析器最基本的功能,但 jsoup 使用一种有别于其他开源项目的方式――选择器,我们将在最后一部分详细介绍 jsoup 选择器,本节中你将看到 jsoup 是如何用最简单的代码实现。

不过 jsoup 也提供了传统的 DOM 方式的元素解析,看看下面的代码

5. html修改

修改数据

在解析文档的同时,我们可能会需要对文档中的某些元素进行修改,例如我们可以为文档中的所有图片增加可点击链接、修改链接地址或者是修改文本等。

下面是一些简单的例子:

清单 4.

doc.select("div.comments a").attr("rel", "nofollow"); // 为所有链接增加 rel=nofollow 属性 doc.select("div.comments a").addClass("mylinkclass"); // 为所有链接增加 class=mylinkclass 属性 doc.select("img").removeAttr("onclick"); // 删除所有图片的 onclick 属性 doc.select("input[type=text]").val(""); // 清空所有文本输入框中的文本

道理很简单,你只需要利用 jsoup 的选择器找出元素,然后就可以通过以上的方法来进行修改,除了无法修改标签名外(可以删除后再插入新的元素),包括元素的属性和文本都可以修改。

修改完直接调用 Element(s) 的 html() 方法就可以获取修改完的 HTML 文档。

6. 跟个htmlparse的比较

与 htmlparser 项目不同的是,jsoup 并没有为 HTML 元素定义一个对应的类,一般一个 HTML 元素的组成部分包括:节点名、属性和文本,jsoup 提供简单的方法供你自己检索这些数据,这也是 jsoup 保持瘦身的原因。

而在元素检索方面,jsoup 的选择器简直无所不能,

这是 jsoup 真正让我折服的地方,jsoup 使用跟 jQuery 一模一样的选择器对元素进行检索,以上的检索方法如果换成是其他的 HTML 解释器,至少都需要很多行代码,而 jsoup 只需要一行代码即可完成。

jsoup 的选择器还支持表达式功能,我们将在最后一节介绍这个超强的选择器。

7. jsoup的用处

7.1. html解析

7.2. html修改

7.3. HTML 文档清理

8. code--读取解析表格2Lisp<Map>

prj.wechatadm4prp

package com.attilax.html;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

//import com.attilax.cc.Document;

import com.attilax.io.pathx;

import com.attilax.lang.core;

import com.attilax.lang.json.JsonX;

import com.attilax.util.AngularJsX;

@SuppressWarnings("all")

public class HtmlX {

public static void main(String[] args) {

Stringjsppath="applyInstall\\appinst_list.jsp";

jsppath="aa/bb";

jsppath=jsppath.replaceAll("/", "\\\\");

System.out.println(jsppath);

List li=getTitlesMap(jsppath,"tabid1","utf-8");

System.out.println(JsonX.toJsonStrO88(li));

}

/**

*

* @param jsppath   %app%/path

* @param tableId

* @param htmlEncode

* @return

*/

public static List<Map> getTitlesMap(String jsppath, String tableId,String htmlEncode) {

jsppath=pathx.delWebappPrefix(jsppath);

jsppath=jsppath.replaceAll("/", "\\\\");

jsppath=pathx.webAppPath()+"\\"+jsppath;

List li=new ArrayList();

File input = new File(jsppath);

try {

Document doc = Jsoup.parse(input, htmlEncode, "http://example.com/");

Element tab_elmt=doc.getElementById(tableId);

Elements   trs=   tab_elmt.getElementsByTag("tr");

Element titleTr=trs.get(0);

Element  fldTr=trs.get(1);

Elements tds=titleTr.getElementsByTag("td");

if(tds.size()==0)

tds=titleTr.getElementsByTag("th");

Elements tds_fld=fldTr.getElementsByTag("td");

for(int i=0;i<tds.size();i++)

{

Element td=tds.get(i);

Map m=new HashMap();

m.put("title", td.text());

String fld1=tds_fld.get(i).text();

String fld=AngularJsX.getFld_sf(fld1);

m.put("fld", fld);

if(fld.length()>0)

li.add(m);

}

} catch (IOException e) {

throw new RuntimeException(e);

}

return li;

}

}

参考

运用 jsoup 对 HTML 文档进行解析和操作(比HTMLParser好) _HTML_CSS_代码迷.htm

使用 jsoup 对 HTML 文档进行解析和操作.htm

atitit. java jsoup html table的读取解析 总结的更多相关文章

  1. Java 自定义注解及注解读取解析--模拟框架生成SQL语句

    假设们使用一张简单的表,结构如下: 定义注解: 表注解: package com.xzlf.annotation; import java.lang.annotation.ElementType; i ...

  2. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  3. Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法

    Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...

  4. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  5. Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python

    Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python 1.1. Sql语法树 ast 如下图锁死1 2. SQL语句解析的思路和过程3 ...

  6. java读取解析application.yml

    java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar <!-- properties和yaml格式化 --> ...

  7. [java] jsoup使用简介-汇率换算器实现-插曲2

    [java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]>   [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...

  8. 【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题

    1.目前测试了20M的文件,可以读取. 2.支持单个工作表1万+的数据行数,耗时如图. 3.以下是关键地方处理的代码 //Accepts objects needed while parsing. / ...

  9. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

随机推荐

  1. 如何将Emmet(ZenCoding)安装到到Dreamweaver8?

    用过其他版本的Dreamweaver,还是习惯了Dreamweaver8,占用少,插件也容易安装,下面讲的是ZenCoding插件的安装方法,当然现在这个已经叫Emmet了. 安装方法: a.下载dw ...

  2. thinkphp输出表格

    //这是打印5列n行的表格,所以mod="5" value="4" <tr> <volist name="data" id ...

  3. 用C语言实现面向对象的开发

    C语言的对象化模型 面向对象的特征主要包括: .封装,隐藏内部实现 .继承,复用现有代码 .多态,改写对象行为 采用C语言实现的关键是如何运用C语言本身的特性来实现上述面向对象的特征. 1.1 封装 ...

  4. Mahout构建图书推荐系统【一起学Mahout】

    阅读导读: 1.Mahout中推荐过滤算法支持哪两种算法? 2.用java代码怎样计算男性用户打分过的图书? 3.itemEuclidean.userEuclideanNoPref各自是什么算法? 1 ...

  5. HTML:几个常见的列表标签

    介绍: 在网页中列表是很常见的标签,主要分为有序标签.无序标签.列表嵌套.定义标签 有序标签:<ol><li></li><ol> 无序标签:<ul ...

  6. SPSS Clementine 数据挖掘入门1

    SPSS Clementine是Spss公司收购ISL获得的数据挖掘工具.在Gartner的客户数据挖掘工具评估中,仅有两家厂商被列为领导者:SAS和SPSS.SAS获得了最高ability to e ...

  7. OpenERP|odoo Web开发

    在OpenERP 7 和 Odoo 8下测试均可. 1.相关库/框架 主要:jQuery(使用1.8.3,如果使用新版本,其他jQuery插件也要升级或修改).Underscore.Qweb 其他:都 ...

  8. Windows Xp不用安装软件管理多个远程桌面连接

    一直使用系统默认的Mstsc来进行远程连接,但如果要连接N个远程的话就比较麻烦 之前也找过第三方的管理软件如:mRemoteNG 此软件有优点就不说了,但我在使用此软件时有一个很大的问题,就是如果一个 ...

  9. (剑指Offer)面试题53:正则表达式匹配

    题目: 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式. ...

  10. Android 代码实现来电拦截

    为了更好地理解这个Demo,我先向大家介绍一下需求与功能. 需求: 每天都会有很多无聊的电话,比如推销商品等,占用我们大量时间不说,有时候还会打乱我们的思路,扰乱我们的正常生活.所以实现一个对某些号码 ...