如何通过java使用JSOUP在HTML页面中抓取和下载表

如何通过java使用JSOUP在HTML页面中抓取和下载表,java,html,jsoup,Java,Html,Jsoup,我尝试了这个…但是行和列分别打印…我的要求是从HTML页面下载表格 public class Main { public static void main(String[] args) throws IOException { String html = "URL"; // Document doc = Jsoup.connect(html).get(); Document doc = Jsoup.parse(html); System.out.

我尝试了这个…但是行和列分别打印…我的要求是从HTML页面下载表格

public class Main {
   public static void main(String[] args) throws IOException {
      String html = "URL";
      // Document doc = Jsoup.connect(html).get();
     Document doc = Jsoup.parse(html);
     System.out.println(doc);
     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());
        }
     }
   }
}
公共类主{
公共静态void main(字符串[]args)引发IOException{
字符串html=“URL”;
//Document doc=Jsoup.connect(html.get();
Document doc=Jsoup.parse(html);
系统输出打印项次(doc);
元素表元素=文件选择(“表格”);
Elements tableHeaderles=tableElements.select(“thead tr th”);
System.out.println(“标题”);
对于(int i=0;i
提前感谢…

使用本教程,解决方案可以是:

package com.github.davidepastore.stackoverflow34331254;

import java.io.FileWriter;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * Reply to stackoverflow 34331254 question.
 *
 */
public class App {
    public static void main(String[] args) throws IOException {
        String url = "http://www.htmlcodetutorial.com/tables/_THEAD.html";
        String fileName = "table.csv";
        FileWriter writer = new FileWriter(fileName);
        Document doc = Jsoup.connect(url).get();
        System.out.println(doc);
        Element tableElement = doc.select("table").first();

        Elements tableHeaderEles = tableElement.select("thead tr th");
        System.out.println("headers");
        for (int i = 0; i < tableHeaderEles.size(); i++) {
            System.out.println(tableHeaderEles.get(i).text());
            writer.append(tableHeaderEles.get(i).text());

            if(i != tableHeaderEles.size() -1){             
                writer.append(',');
            }
        }
        writer.append('\n');
        System.out.println();

        Elements tableRowElements = tableElement.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());
                writer.append(rowItems.get(j).text());

                if(j != rowItems.size() -1){
                    writer.append(',');
                }
            }
            writer.append('\n');
        }

        writer.close();
    }
}
csv
输出将是:

Weekday,Date,Manager,Qty
Mon,09/11,Kelsey,639
Tue,09/12,Lindsey,596
Wed,09/13,Randy,1135
Thu,09/14,Susan,1002
Fri,09/15,Randy,908
Sat,09/16,Lindsey,371
Sun,09/17,Susan,272
更新

是从另一个url加载的:


它包含一个带有表内容的
productDataTable
属性。

我不清楚问题出在哪里。你的代码看起来不错。你有错误吗?如果是,请打印StackTrace。你能发布原始的html表格并告诉我们你需要什么样的输出吗。当我执行上面的代码时,得到如下消息,如上面所示。。。但是我想要的是将表格从html页面下载到一些点扩展文件中。下载是什么意思?您想用表数据从java进程中编写一个文件吗?如果是这样,请使用java的文件系统方法或apache commons之类的包装器:。我的要求是将html页面中的表数据存储到某个文件(.txt/pdf…)请帮助我Hello Davide Pastore…首先感谢您的快速响应,回答:您发布的工作正常,但在我的例子中,表中的数据是动态加载的,并且在发布时不显示数据scraping@satish你的意思是使用ajax请求加载数据吗?您好@Davide Pastore。。当然数据不是使用ajax请求加载的。而且我们在SourcePage中看不到表。您可以添加包含该表的链接吗?Hello@Davide Pastore。。。谢谢你,兄弟。。现在工作正常了。
Weekday,Date,Manager,Qty
Mon,09/11,Kelsey,639
Tue,09/12,Lindsey,596
Wed,09/13,Randy,1135
Thu,09/14,Susan,1002
Fri,09/15,Randy,908
Sat,09/16,Lindsey,371
Sun,09/17,Susan,272