将HTML表格解析成Groovy列表?

3
我希望能够解析HTML页面并获取表格的值。例如,通过解析它来获取字典列表,每个列表元素都对应表中的一行。
假设表格如下:
<table style="width:100%">
  <tr>
    <td>Jill</td>
    <td>Smith</td>      
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>        
    <td>94</td>
  </tr>
</table>

结果

[Jill,  Smith,  50]
[Eve,   Jackson,    94]

我通过两种方式实现这个目标:
  1. Using Xpath :

    page.body.div.table.tr.time;
    
  2. Using closure like this:

    page."**".findAll { it.@class.toString().contains("time")}.each {
    

这两种方法都使用XMLSlurper:

@Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='1.2')
def parser = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser())

那么使用Groovy获取表格值还有其他方法吗?

感谢您的帮助!


2
以上两种方式是否存在任何问题,导致需要第三种方法? - dmahapatro
1
你的示例HTML中是否应该有一个类名为"time"的元素? - tim_yates
1
第一种方法的主要问题是硬编码解决方案。它不够灵活。如果结构发生变化,则可能返回意外结果。第二种方法是我目前更喜欢的方式。这里唯一的问题是计算成本和某些情况下需要正则表达式。我正在寻找类似于以下通用解决方案:https://dev59.com/0Gw15IYBdhLWcg3w6f80 - DataScientYst
1个回答

2
我使用jsoup HTML解析器取得了很好的结果。它是一个Java库,但在Groovy中也能很好地工作。这里有一个Java语言解析表格的例子,以及一篇关于使用Groovy和jsoup进行网页抓取的博客文章。这个问题有一个使用Groovy的解析表格的示例答案。

这是我找到的可行示例:https://dev59.com/ZW035IYBdhLWcg3wef9y。还有一个Groovy版本。谢谢。 - DataScientYst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接