从html页面中抽取table表格数据
/**
* [getDataFromTrElems 获取表格行元素数据]
* @param {[Object]} trElems [trs dom]
* @param {[String]} type [type]
* @return {[Array]}
*/
function getDataFromTrElems(trElems, type) { if (!trElems || !trElems.length) {
return [];
} var data = [];
var cell = type == 'head' ? 'th' : 'td'; for (var i = 0, n = trElems.length; i < n; i++) { var trElem = $(trElems[i]);
var cellElems = trElem.children(cell);
var trData = []; for (var j = 0, m = cellElems.length; j < m; j++) { cellElem = $(cellElems[j]);
colspan = +cellElem.attr('colspan');
if (!(colspan > 0)) {
colspan = 1;
} rowspan = +cellElem.attr('rowspan');
if (!(rowspan > 0)) {
rowspan = 1;
} text = $.trim(cellElem.text());
trData.push({
colspan: colspan,
rowspan: rowspan,
text: text
});
} data.push(trData);
} return data;
}
/**
* [getDataFromHead 获取表格head数据]
* @param {[Object]} elem [head dom]
* @return {[Array]}
*/
function getDataFromHead(elem) { if (!elem || !elem.length) {
return [];
} var trElems = elem.children('tr');
return getDataFromTrElems(trElems, 'head');
}
/**
* [getDataFromBody 获取表格body数据]
* @param {[Object]} elem [body dom]
* @return {[Array]}
*/
function getDataFromBody(elem) { if (!elem || !elem.length) {
return [];
} var trElems = elem.children('tr');
return getDataFromTrElems(trElems, 'body');
}
/**
* [getDataFromTbaleElem 获取表格元素数据]
* @param {[Object]} elem [table dom]
* @return {[Array]}
*/
function getDataFromTbaleElem(elem) { if (!elem || !elem.length) {
return [];
} var headElem = elem.children('thead');
var bodyElem = elem.children('tbody');
var headData = getDataFromHead(headElem);
var bodyData = getDataFromBody(bodyElem);
var rawData = headData.concat(bodyData); return formRawData(rawData);
}
/**
* [formRawData 格式化表格初始数据]
* @param {[Array]} rawData [raw data]
* @return {[Array]}
*/
function formRawData(rawData) { var data = []; rawData.forEach(function(trData, i) { data[i] = data[i] && data[i].length ? data[i] : [];
var colIndex = -1; trData.forEach(function(cellData, j) { var text = cellData.text; for (var c = 0; c < cellData.colspan; c++) {
++colIndex; if (typeof data[i][colIndex] != 'undefined') {
++colIndex;
} data[i][colIndex] = text; for (var r = 2; r <= cellData.rowspan; r++) {
var rowIndex = i + r - 1;
rawData[rowIndex].splice(colIndex, 0, {
text: text,
colspan: 1,
rowspan: 1
});
}
}
});
}); return data;
} $(document).ready(function() {
var start = new Date();
var tableElems = $('table');
var results = {};
for (var index = 0, len = tableElems.length; index < len; index++) { var tableElem = $(tableElems[index]);
results[index] = getDataFromTbaleElem(tableElem);
}
var end = new Date();
console.log(results, end - start);
});
从html页面中抽取table表格数据的更多相关文章
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- 12 Servlet_04 Servlet增删改查 静态页面与动态页面 EL表达式 table表格的一些样式
今天学习了servlet的增删改查: 存储数据 setAttribute(String name,Object obj );获取数据 getAttribute(String name);删除数据 re ...
- 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较
一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...
- asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL
代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...
- 在JSP页面中输出JSON格式数据
JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.html J ...
- Java+Selenium 如何参数化验证Table表格数据
场景: 当我们编写脚本时候,需要验证某个表格某一列数据,或者多个列数据. 如果每验证一个就写一个方法,实在是太费事, 因此我们需要有参数化的思想,把某列数据看成固定的元素,然后去验证即可. 1. 示例 ...
- 如何从SAP ECC中抽取簇表数据
打开SAP 客户端工具 ABAP 中 创建包(SE80) 创建函数组 展开ABAP 工作台,双击ABAP Dictionary 字典: 选择第三个data type,输入数据结构名称ZSQL_CLAU ...
- vue+iview中的table表格导出excel表格
一.iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件. 二.实现table表格导出excel文件利用Blob.js 和 ...
- 页面中 json 格式显示 数据
在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get(" ...
随机推荐
- Linux集群部署自定义时间同步服务器(ntpd)
Linux集群部署自定义时间同步服务器(ntpd) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为一名运维人员,在搭建集群的时候,第一步需要做的就是同步每个机器的时间,尤其是在 ...
- maven的隔离部署
场景:比如说我们一个项目,在开发的时候是一套配置文件,在发布的时候又是一套配置文件.我们每次都要修改配置文件很烦有木有.所以,我们需要maven的这样的一个功能,就是隔离部署.就是说我们写好几套配置文 ...
- linux 命令收集 阿里云nginx升级等 查看磁盘空间 版本等
—————————————————— 查磁盘 df -h此命令直观的呈现出磁盘大小有多少Gdf -hl文件系统 容量 已用 可用 已用% 挂载点/dev/hdb2 75G 75G 0 100% /就是 ...
- JS ——document、“或”、event(事件对象)
1.document <document>是所以HTML的最高节点,比<html>的等级还要高. <document>的第一个子节点是“!”——document.c ...
- 深度神经网络tricks and tips
1)data augmentation (augment 增加,aug:to increase 词根,同August(奥古斯特即凯撒大帝,自认为最伟大的帝王,他出生在八月,他以自己的名字命名这个月)同 ...
- 使用flask_socketio实现服务端向客户端定时推送
websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...
- 转载 int和string 类型的互换
https://blog.csdn.net/u012421436/article/details/51386690 不论是在什么语言下编程(除C,因为C是没有string类型的),int与string ...
- Gaussian discriminant analysis 高斯判别分析
高斯判别分析(附Matlab实现) 生成学习算法 高斯判别分析(Gaussian Discriminant analysis,GDA),与之前的线性回归和Logistic回归从方法上讲有很大的不同,G ...
- linux 中的 open() read() write() close() 函数
1. open()函数 功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所需头文件:#include <sys/types.h>,#includ ...
- SpringBoot整合Jest操作ES
(1).添加依赖 <dependency> <groupId>io.searchbox</groupId> <artifactId>jest</a ...