2016-05-08 78 views
1

我想解析一個HTML頁面並獲取表值。例如解析它以獲取字典列表。每個列表元素將是與表中的一行相對應的字典。將HTML表解析爲Groovy列表?

假設該表是:

<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. 使用XPath:

    page.body.div.table.tr.time; 
    
  2. 使用封這樣的:

    page."**".findAll { [email protected]().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」類 –

+0

1)第一種方法主要關注的是硬編碼解決方案。這不是敏捷。如果結構發生變化,則可能會返回意外的結果。第二種方法是我現在更喜歡的方式。這裏唯一的問題是計算成本和一些情況下正則表達式的需要。我正在尋找類似於以下的通用解決方案:http://stackoverflow.com/questions/6325216/parse-html-table-to-python-list – Vanko

回答

1

我用jsoup HTML解析器得到了很好的結果。這是一個Java庫,但與Groovy配合良好。這裏有一個parsing a table in Java的示例,以及一個有用的blog entry,它使用Groovy和jsoup進行抓取。這個question有一個解析表格的常規例子的答案。

+0

這是我找到的工作示例:http:// stackoverflow .COM /問題/ 5396098 /如何對語法分析一個表,從-HTML的使用,jsoup。還有一個時髦的版本。謝謝。 – Vanko