Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HtmlUnit以编程方式从HTML获取列表_Java_Html_Dom_Htmlunit - Fatal编程技术网

Java 使用HtmlUnit以编程方式从HTML获取列表

Java 使用HtmlUnit以编程方式从HTML获取列表,java,html,dom,htmlunit,Java,Html,Dom,Htmlunit,我试图通过编程(用Java)提取与特定日期对应的文章列表(标题和URL链接),如图所示 结果会是这样的: 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 Mid

我试图通过编程(用Java)提取与特定日期对应的文章列表(标题和URL链接),如图所示

结果会是这样的:

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”标签中。我只是不知道如何访问和遍历这些标记。

尝试使用getElementsByTagName()以便获取所有的
  • 首先,查找id为“yfncsumtab”的表:

    然后,在表中查找

    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);
        }
    }
    
    SimpleDataFormatterDateParser=。。。
    列表结果=新建LinkedList();
    Date lastDate=null;
    //for(HtmlElement节点:table.GetHtmlElementdDescendats()){
    for(HtmlElement节点:findAllChildren(表)){
    if(“ul”.equals(node.getTagName())){
    字符串title=node.asText();
    结果.添加(新日期和标题)(最后日期,标题);
    }
    if(“h3”.equals(node.getTagName())){
    String dateString=node.asText();
    lastDate=dateParser.parse(日期字符串);
    }
    }
    
    和helper 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;
    }
    
    私有HtmleElement findAllChildren(DomNode父节点){
    列表结果=新建LinkedList();
    for(DomNode子节点:parent.getChildren()){
    if(HtmlElement的子实例){
    结果。添加((HtmleElement)子项);
    }
    }
    for(DomNode子节点:parent.getChildren){
    结果:addAll(findAllChildren(child));
    }
    复述结果;
    }
    
    只需学习。通过使用
    getFirstByXPath
    getByXPath
    ,您将得到一个1到4行的解决方案。它在页面中。

    谢谢您。我尝试了以下代码,似乎代码从未进入for循环。相反,我得到了以下输出:
    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;
    }