无法使用HtmlUnit通过xpath提取内容

时间:2012-08-12 14:04:30

标签: xpath htmlunit

我正在尝试从马耳他新闻页面中提取标题

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提供了一个空指针

((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。

这可能是什么原因?

提前致谢

1 个答案:

答案 0 :(得分:0)

这并不容易。你应该:

  1. 请参阅HTMLUnit实际使用Page.asXml()
  2. 创建的文本
  3. 纠正您正在遍历的XPath,以匹配上一步中输出的HTMLUnit