You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jsoup提取HTML表格td内容中途终止,如何获取完整数据?

解决Jsoup爬取STEM SEVIS数据表格中途停止的问题

问题根源

你遇到的输出中途停止问题,核心原因有两个:

  1. 目标网页的表格数据量极大,控制台对单批次输出的文本长度有限制,直接打印大内容会触发输出中断
  2. Jsoup默认连接配置未适配大网页加载,可能出现网页内容加载不完整的情况

解决方案

1. 调整Jsoup连接参数

增加超时时间、取消内容大小限制,确保网页完整加载:

Document doc = Jsoup.connect("https://studyinthestates.dhs.gov/sevis-data-mapping-tool/september-2023-stem-sevis-data-mapping-tool-data")
        .timeout(10000) // 设置10秒超时阈值
        .maxBodySize(0) // 取消响应内容大小限制
        .get();

2. 替换输出方式

控制台无法高效处理超大量文本输出,改用文件写入能彻底避免中断问题,同时保留完整数据。

3. 优化代码逻辑

利用StringBuilder缓存数据,减少IO操作次数,提升处理效率。

修改后的完整代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.FileWriter;
import java.io.IOException;

public class myProjectDataExtracter {
    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();

        // 配置Jsoup连接,适配大网页加载
        Document doc = Jsoup.connect("https://studyinthestates.dhs.gov/sevis-data-mapping-tool/september-2023-stem-sevis-data-mapping-tool-data")
                .timeout(10000)
                .maxBodySize(0)
                .get();

        // 遍历表格行,缓存所有数据
        for (Element table : doc.select("table")) {
            for (Element row : table.select("tr")) {
                Elements tds = row.select("td");
                sb.append(tds.text()).append(System.lineSeparator());
            }
        }

        // 将缓存数据写入文件
        try (FileWriter myWriter = new FileWriter("sevis_stem_data.txt")) {
            myWriter.write(sb.toString());
        }
        System.out.println("所有表格数据已完整写入sevis_stem_data.txt文件");
    }
}

额外说明

  • 如果坚持需要控制台输出,建议每处理100-200行就打印一次缓存内容并清空StringBuilder,避免单条输出内容过长
  • 目标网页数据量超10万行,控制台输出会非常缓慢且易卡顿,写入文件是更稳妥的选择

内容的提问来源于stack exchange,提问作者sam tada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:35:12