Java抓取HTML中的表格
在Web开发中,经常需要从HTML页面中抓取数据进行处理和分析。而表格是HTML中常见的数据展示方式之一。本文将介绍如何使用Java来抓取HTML中的表格数据,并展示一些代码示例。
1. 使用Jsoup库抓取HTML页面
在Java中,我们可以使用Jsoup库来解析和操作HTML文档。首先,我们需要将Jsoup库添加到项目的依赖中。你可以在Maven项目中的pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
之后,我们就可以使用Jsoup来抓取HTML页面了。下面是一个简单的示例,展示了如何从一个URL中获取HTML页面的内容:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class HTMLParser {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("
String html = doc.html();
System.out.println(html);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们使用Jsoup.connect()
方法传入一个URL来获取HTML页面的内容,并使用doc.html()
方法获取整个HTML页面的字符串表示。你可以根据实际需求,进一步解析和操作这个HTML字符串。
2. 抓取HTML表格数据
一旦我们获取了HTML页面的内容,就可以使用Jsoup来抓取表格数据了。下面是一个示例,展示了如何从HTML页面中抓取表格数据并打印:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class TableParser {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("
Elements tables = doc.select("table");
for (Element table : tables) {
Elements rows = table.select("tr");
for (Element row : rows) {
Elements cells = row.select("td");
for (Element cell : cells) {
System.out.println(cell.text());
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码中,我们使用doc.select("table")
方法来选择HTML页面中的所有表格,然后使用嵌套的select()
方法来选择表格中的行和单元格。最后,我们使用cell.text()
方法获取每个单元格的文本内容并打印出来。
3. 数据处理和展示
一旦我们抓取到了表格数据,我们可以根据实际需求进行进一步的处理和展示。下面是一个示例,展示了如何使用Apache Commons Math库来计算表格中数值列的平均值,并使用JFreeChart库来绘制饼状图:
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class DataAnalysis {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("
Elements tables = doc.select("table");
Element targetTable = tables.get(0); // 假设我们要处理第一个表格
Elements rows = targetTable.select("tr");
DescriptiveStatistics stats = new DescriptiveStatistics();
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 1; i < rows.size(); i++) { // 跳过表头行
Element row = rows.get(i);
Elements cells = row.select("td");
double value = Double.parseDouble(cells.get(1).text()); // 假设第二列是数值列
stats.addValue(value);
dataset.setValue(cells.get(0).text(), value); // 假设第一列是标签列
}
double mean = stats.getMean();
System.out.println("Mean: " + mean);
JFreeChart chart = ChartFactory.createPieChart("Data Distribution", dataset);
ChartFrame frame = new ChartFrame("Pie Chart", chart);
frame.pack