java取html中的table_从一段html的table标签中按列提取信息

我们平时经常会遇到提取某个html中某个table的信息

比如

e62591603198f2bcb02599517218a874.png

我们要提取出序号、登记编号、出质人等等。我的思路是先通过正则锁定该table,在通过Jsoup来按列解析内容。

我将提取信息的过程抽取出了一个方法,其中内含Jsoup和Regex

/**

* 从table中提取所有td的方法 返回一个list包含table中所有数据

*

* @param html

* 所要提取的html

* @param regex

* 要解析的table的正则

* @param tdNum

* 每个tr中的td个数

* @return List

* @author kfh

*/

public List extractTable(String html, String regex, int tdNum) {

ArrayList result = new ArrayList();

String content = this.getValue(html, regex);

// 如果开头缺失table标签,则补全之

if (!content.startsWith("

content = "

}

if (StringUtils.isEmpty(content)) {

logger.info("抓取table为空, 网页无相关信息或正则出错...");

return null;

} else {

Document table = Jsoup.parse(content);

if (table != null) {

Elements trs = table.select("tr:has(td)");

for (Iterator iterator = trs.iterator(); iterator.hasNext();) {

// 拿到第一个tr

Element tr = (Element) iterator.next();

// 得到tds

Elements tds = tr.select("td");

// 如果td的size正好等于tdNum

if (tds.size() == tdNum) {

for (int i = 0; i <= (tdNum - 1); i++) {

result.add(tds.get(i).text());

}

} else {

// 如果td的size 小于tdNum

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

result.add(tds.get(i).text());

}

}

}

}

return result;

}

}

☆说明:

if (!content.startsWith("

content = "

}

为什么会存在呢?是因为我从一个页面中唯一定位一个包含"股权出质信息"的table的时候需要的正则是像这样子的:

股权出质登记信息[\s\S]*?

是定位到包含"股权出质登记信息"作为th的唯一table ,所以我用jsoup解析的时候就手动将table标签的开始标签补齐了,返回的List包含table中所有的列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值