如何通过java使用JSOUP在HTML页面中抓取和下载表
我尝试了这个…但是行和列分别打印…我的要求是从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.
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