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