2013-01-31 37 views
1

我試圖以編程方式(Java)提取對應於特定日期的文章列表(標題和URL鏈接),如here所示。使用HtmlUnit以編程方式從HTML獲取列表

其結果將是這樣的:

Thursday, January 31, 2013 

- Dollar Curbs Tumble Despite.... 
- http://finance.yahoo.com/news/dollar-curbs-tumble-despite-gdp-051100047.html 

Wednesday, January 30,2013 

- [video] Santelli's Midday Bond Report 
- http://us.rd.yahoo.com/finance/external/video/cnbc/SIG=110mfa5qs/*http://video.cnbc.com/gallery/?video=3000144631&__source=yahoo%7Cheadline%7Cquote%7Cvideo%7C&par=yahoo 

所以,如圖所示,對於給定的日期,我試圖提取使用所有的HtmlUnit標題/鏈接。

問題是:我對HTML/DOM的知識對於這個微不足道的任務來說非常有限,並且非常感謝任何人的幫助,他們可以幫助我,或者指向正確的方向。

謝謝。

編輯: 當檢查頁面時,看起來好像我正在尋找的標籤包含在交替的「h3」和「ul」標籤中。我只是不知道怎麼去和遍歷這些標籤..

回答

1

第一,發現表ID 「yfncsumtab」:

HtmlTable table = page.getElementById("yfncsumtab"); 

然後,查表內爲<h3><ul>

SimpleDateFormatter dateParser = ... 
List<DateAndTitle> result = new LinkedList(); 
Date lastDate = null; 

// for(HtmlElement node : table.getHtmlElementDescendants()) { 
for(HtmlElement node : findAllChildren(table)) { 
    if("ul".equals(node.getTagName())) { 
     String title = node.asText(); 
     result.add(new DateAndTitle(lastDate, title); 
    } 
    if("h3".equals(node.getTagName())) { 
     String dateString = node.asText(); 
     lastDate = dateParser.parse(dateString); 
    } 
} 

和輔助FUNC遞歸找到所有子孫HTML節點:

private HtmlElement findAllChildren(DomNode parent) { 
    List<HtmlElement> result = new LinkedList(); 
    for(DomNode child : parent.getChildren()) { 
     if(child instanceof HtmlElement) { 
      result.add((HtmlElement) child); 
     } 
    } 

    for(DomNode child : parent.getChildren) { 
     result.addAll(findAllChildren(child)); 
    } 

    retutn result; 
} 
+0

感謝您的支持。我嘗試了下面的代碼,https://gist.github.com/348dcb62ee8a83c32a9b,它似乎代碼永遠不會進入for循環。相反,我得到以下輸出:https://gist.github.com/ae7d24fd95d323dc7fe9 – sudo

1

剛剛學XPath。您將通過使用getFirstByXPathgetByXPath獲得1至4行解決方案。它在Getting Started頁面。

相關問題