1

hereに示すように、特定の日付に対応する記事のリスト (タイトルと URL リンク) をプログラムで (Java で) 抽出しようとしています。

結果は次のようになります。

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」タグが交互に含まれているように見えます。これらのタグにアクセスしてトラバースする方法がわかりません..

4

3 に答える 3

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;
}
于 2013-02-01T03:08:17.760 に答える
1

XPathを学ぶだけです。getFirstByXPathまたはを使用すると、1 ~ 4 行のソリューションが得られgetByXPathます。はじめにのページにあります。

于 2013-02-02T14:00:19.817 に答える
1

すべての <LI> を取得できるように、 getElementsByTagName() を使用してみてください

http://httpunit.sourceforge.net/doc/api/com/meterware/httpunit/WebResponse.html#getElementsByTagName(java.lang.String)

于 2013-02-01T03:00:34.517 に答える