代码之家  ›  专栏  ›  技术社区  ›  aintnoprophet

在HTML表中读取到Java

  •  1
  • aintnoprophet  · 技术社区  · 15 年前

    我需要使用Java代码从HTML页面中提取数据。Java部分是必需的。

    我要从中提取信息的页面是 http://www.weather.gov/data/obhistory/KMCI.html .

    我需要创建一个hashmaps…的列表,或者一些我可以在后面的代码中引用的数据对象。

    到目前为止,我只有这些:

    URL weatherDataKC = new URL("http://www.weather.gov/data/obhistory/KMCI.html");
    InputStream is = weatherDataKC.openStream();
    int cnt = 0;
    StringBuffer buffer = new StringBuffer();
    
    while ((cnt = is.read()) != -1){
        buffer.append((char) cnt);
    }
    
    System.out.print(buffer.toString());
    

    有什么建议从哪里开始?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Marian    15 年前

    J2SE在包中包含HTML解析功能 javax.swing.text.html javax.swing.text.html.parser . HTMLEditorKit.ParserCallback 接收推送的事件 DocumentParser (最好通过 ParserDelegator )这个框架非常类似于XML的SAX解析器。

    当心,有一些虫子。它不能很好地处理糟糕的HTML。


    处理科尔斯潘和罗斯潘是你的事。

        2
  •  3
  •   dfa    15 年前

    有一个很好的HTML解析器叫做neko:

    Nekohtml是一个简单的HTML扫描器和标签均衡器,它允许应用程序程序员使用标准的XML接口解析HTML文档和访问信息。解析器可以扫描HTML文件并“修复”人类(和计算机)作者在编写HTML文档时所犯的许多常见错误。nekohtml添加缺少的父元素;自动关闭带有可选结束标记的元素;并且可以处理不匹配的内联元素标记。

    More information here .

        3
  •  2
  •   Damo    15 年前

    使用类似HTML语法分析器 CyberNeko

        4
  •  0
  •   DisgruntledGoat    15 年前

    HTML抓取是出了名的困难,除非你有很多类似于独特ID的“钩子”。例如,所需的表以该HTML开头:

    <table cellspacing="3" cellpadding="2" border="0" width="670">
    

    …非常通用,可能与页面上的几个表匹配。另一个问题是,如果HTML结构发生变化会发生什么?你必须重新定义你所有的解析规则…