【问题标题】:How to get a table from an html page using JAVA如何使用 JAVA 从 html 页面获取表格
【发布时间】:2012-06-02 00:40:20
【问题描述】:

我正在从事一个项目,我试图从互联网上获取财务报表并在 JAVA 应用程序中使用它们来自动创建比率和图表。

我使用的网站使用登录名和密码来访问表格。
Tag 是 TBODY,但 html 中还有另外 2 个 TBODY。

如何使用 java 将我的表格打印到一个 txt 文件中,然后我可以在我的应用程序中使用该文件? 解决此问题的最佳方法是什么,我应该阅读什么?

【问题讨论】:

    标签: java arrays jsoup html-parsing


    【解决方案1】:

    如果这是我的项目,我会考虑使用 HTML 解析器,例如 jsoup(尽管其他可用)。 jsoup 网站有一个教程,玩了一段时间后,你可能会发现它很容易使用。

    例如,对于这样的 HTML 表格:

    jsoup 可以这样解析它:

    import java.io.IOException;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    public class TableEg {
       public static void main(String[] args) {
          String html = "http://publib.boulder.ibm.com/infocenter/iadthelp/v7r1/topic/" +
                "com.ibm.etools.iseries.toolbox.doc/htmtblex.htm";
          try {
             Document doc = Jsoup.connect(html).get();
             Elements tableElements = doc.select("table");
    
             Elements tableHeaderEles = tableElements.select("thead tr th");
             System.out.println("headers");
             for (int i = 0; i < tableHeaderEles.size(); i++) {
                System.out.println(tableHeaderEles.get(i).text());
             }
             System.out.println();
    
             Elements tableRowElements = tableElements.select(":not(thead) tr");
    
             for (int i = 0; i < tableRowElements.size(); i++) {
                Element row = tableRowElements.get(i);
                System.out.println("row");
                Elements rowItems = row.select("td");
                for (int j = 0; j < rowItems.size(); j++) {
                   System.out.println(rowItems.get(j).text());
                }
                System.out.println();
             }
    
          } catch (IOException e) {
             e.printStackTrace();
          }
       }
    }
    

    导致以下输出:

    headers
    ACCOUNT
    NAME
    BALANCE
    
    row
    0000001
    Customer1
    100.00
    
    row
    0000002
    Customer2
    200.00
    
    row
    0000003
    Customer3
    550.00
    

    【讨论】:

    • 如果我需要密码才能访问带有表格的 html 页面,那我该怎么做呢?无法在获取请求中发送密码。
    • 悬停,如果您能接受我为 HTML 表格添加代码的编辑,我将不胜感激。如果网址失效,这将很有用。感谢这个出色的答案。谢谢你,我的朋友,我爱你。
    • @BoratSagdiyev:请格式化您的 HTML 代码以符合标准。
    • 谢谢悬停。我不确定我是否理解。我应该让它适合而不需要横向滚动吗?
    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多