0

このマルタのニュースページからタイトルを抽出しようとしています

http://www.maltarightnow.com/Default.asp?module=news&at=Inawgurat+%26%23289%3Bnien+%26%23289%3Bdid+f%27Marsalforn&t=a&aid=99839603&cid=19

次のXPathを使用して

html/body/table/tbody/tr[2]/td/table/tbody/tr[4]/td/table/tbody/tr[1]/td[1]/table/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr[1]/td/h1

(きれいではありませんが、この Xpath は Chrome によって生成されたものであり、要素 ID がないため理にかなっています)。

JavaでHTMLUnitを使用してプログラムでタイトルを抽出しています。これがコードです。同じコードを使用して (明らかに別の xpath を使用して) ニュース コンテンツと記事の日付を抽出しました。

public static void main (String[] args) {
        WebClient webClient = new WebClient();
        HtmlPage page = null;
        try {
            page = webClient.getPage("http://www.maltarightnow.com/?module=news&at=Inawgurat+%26%23289%3Bnien+%26%23289%3Bdid+f%27Marsalforn&t=a&aid=99839603&cid=19");
        } catch (FailingHttpStatusCodeException | IOException e) {
        }

        String text = ((DomElement)page.getFirstByXPath("html/body/table/tbody/tr[2]/td/table/tbody/tr[4]/td/table/tbody/tr[1]/td[1]/table/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr[1]/td/h1")).asText();
        System.out.println(text);
    }

ただし、言及されたxpathにnullポインターを与えています

((DomElement)page.getFirstByXPath("html/body/table/tbody/tr[2]/td/table/tbody/tr[4]/td/table/tbody/tr[1]/td[1]/table/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr[1]/td/h1")).asText();

DomElement が見つからず、そこにあると確信しています。結局、Chrome が XPath を作成しました。

これの原因は何ですか?

前もって感謝します

4

1 に答える 1

0

それほど簡単ではありません。あなたがすべき:

  1. HTMLUnitが実際に作成しているテキストを参照してくださいPage.asXml()
  2. 前のステップで HTMLUnit が出力しているものと一致するように、トラバースしている XPath を修正します。
于 2012-08-12T20:00:58.423 に答える