atitit. java jsoup html table的读取解析 总结
atitit. java jsoup html table的读取解析 总结
1. 两个大的parser ,,,jsoup 跟个 htmlparser 1
4. 解析并提取 HTML 元素的模式( 选择器 and DOM 方式 ) 2
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的读取解析 总结的更多相关文章
- Java 自定义注解及注解读取解析--模拟框架生成SQL语句
假设们使用一张简单的表,结构如下: 定义注解: 表注解: package com.xzlf.annotation; import java.lang.annotation.ElementType; i ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...
- 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 ...
- 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 ...
- java读取解析application.yml
java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar <!-- properties和yaml格式化 --> ...
- [java] jsoup使用简介-汇率换算器实现-插曲2
[java] jsoup使用简介-汇率换算器实现-插曲2 // */ // ]]> [java] jsoup使用简介-汇率换算器实现-插曲2 Table of Contents 1 系列文章 ...
- 【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题
1.目前测试了20M的文件,可以读取. 2.支持单个工作表1万+的数据行数,耗时如图. 3.以下是关键地方处理的代码 //Accepts objects needed while parsing. / ...
- java上传excel文件及解析
java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...
随机推荐
- [翻译] PBJNetworkObserver 网络监控
PBJNetworkObserver 网络监控 https://github.com/piemonte/PBJNetworkObserver Introduction 'PBJNetworkObser ...
- CentOS6.5配置网络
[ CleverCode发表在csdn博客中的原创作品,请勿转载.原创地址:http://blog.csdn.net/clevercode/article/details/46376985] 1 网卡 ...
- 突破技术管理,IT人中年危机变契机
突破技术管理,IT人中年危机变契机 中生代技术 Yesterday 作为一个老技术人,今天不聊技术,就聊点技术人员职业发展的事情:对技术管理岗位的认知,比如技术总监. 先贴一张技术人员职业发展路线图, ...
- vnstat 查看服务器带宽统计命令
vnStat是一个Linux下的网络流量监控软件,它记录指定网卡每日的传输流量日志. 它并非基于网络包的过滤,而是分析文件系统- /proc, 所以vnStat无需root的权限就可使用. ,它还自带 ...
- vb.net中将DataGridView与数据源绑定
在< .net中将DataGridView内的数据导出为Excel表格>中说了如何导出数据到Excel,今天这篇文章将讲述如何绑定数据源,在控件中显示我们需要的信息. 在敲机房收费系统的时 ...
- 性能测试工具 nGrinder 项目剖析及二次开发
转:https://testerhome.com/topics/4225 0.背景 组内需要一款轻量级的性能测试工具,之前考虑过LR(太笨重,单实例,当然它的地位是不容置疑的),阿里云的PTS(htt ...
- 将应用发布到WasLiberty的两种方法
1.直接将War放到defaultserver(或其它自定义server)的dropin目录. 一放进去,war中的app就会随着server启动起来,这个war是会被解压的,用find / -nam ...
- openstack horizon CSS 离线 改动
Openstack horizon 的CSS主要保存在几个文件夹中,各自是horizon/static/dashboard/scss;horizon/openstack_dashboard/stati ...
- PHP出现Notice警告怎么办
如下所示,出现Notice警告 程序并没有大错,只是一些变量没有定义,你在代码的第一行加入这一句就可以了:error_reporting(E_ALL ^ E_NOTICE); 恢复正常了.
- ajax local.href不跳转的原因之一
ajax local.href不跳转的原因之一 打开F12发现一直报 next.html is not a function…… 后来发现next少了(),看得我尴尬症都犯了