【实战】将html文档中table转化为json或xlsx

需求

我想获取当前访问页面的table中的数据,然后存储文文本或excel文件

借助工具

  • tabletojson
  • xlsx
  • 或者手动爬取HTML文档,然后借助jQuery等工具手动解析文档

tabletojson

INTRO:尝试将HTML tables转换为JSON。

RETURN:始终返回一个数组,长度根据html中的table数量决定

注意:

  • 如果table列中存在重复的列名,会给后面的列名加上数字后缀,如: xxxx_2
  • 如果存在合并行rowspan,会被自动解除合并,恢复原始数据
  • 表格的第一行是标题,useFirstRowForHeadings:true
  • table中包含了html元素等等,默认情况下,将会将所有的内容转换为纯文本----也就是解析过的不含标签的,使得到对象会更简单。可配置项:stripHtmlFromHeadings、stripHtmlFromCells,如果要同时设置前面两项,可以设置stripHtml
  • convertUrl可以设置代理,依赖got–一个最好用的nodejs平台的HTTP请求库

平台:nodejs

const tabletojson = require('tabletojson').Tabletojson
const fs = require('fs')
const path = require('path')
// tunnel包已经无人维护了,但仍然很受欢迎【一个用于隧道代理的 HTTP/HTTPS 代理】
const tunnel = require('tunnel')

// 解析远程页面
tabletojson.convertUrl(
'https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes',
{
// 可选的配置项
useFirstRowForHeadings: true// 第一行为标题,那就忽略掉【默认值为true】
stripHtmlFromCells: true, // 默认值:true
stripHtmlFromHeadings: true,  // 默认值:true
forceIndexAsNumber: false, // 强制使用index作为标题,而不是列名
countDuplicateHeadings: true, // 重复标题默认会加数字后缀
ignoreColumns: [1,3], // 忽略列索引为1,3的列
onlyColumns: [1,3], // 只显示索引为1,3的列
ignoreHiddenRows: true, // 忽略设置为display:none的行
headings: ['A'], // 默认值null/undefined, 重命名表格列名
limitrows: 20, // null/undefined,限制行数
containsClasses: [], //null/undefined, 限定查找使用了指定class的table
got: { // 只能用于这个convertUrl中,设置proxy\headers
	agent: tunnel.httpOverHttp({
            proxy: {
                host: 'proxy:8080'
            }
        })
}
}
(tableasjson) => {
console.log(tableasjson)
})

// 解析已有的html文件
const fileHtml = fs.readFileSync(path.resolve(__dirname, '../demo.html'))
const tableData = tabletojson.conver(fileHtml)
console.log(tableData)

得到数据后用xlsx创建sheet,然后用fs写入xlsx文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值