You need to enable JavaScript to run this app. 如何将Jsoup解析HTML获取的数据正确导出保存为CSV文件
优惠活动
大模型
产品
解决方案
定价
更多

如何将Jsoup解析HTML获取的数据正确导出保存为CSV文件

问题原因
  • 没有拆分每行的独立单元格:Element.text() 会把当前<tr>标签下所有子元素的文本合并为一个用空格分隔的字符串,你没有单独提取每个<td>/<th>的内容,自然无法按列拆分
  • String.join用法不符合预期:你传入的第二个参数是单个字符串,无法完成多列内容的逗号拼接,该方法需要传入多个待拼接的字符串集合/数组
修正后可直接导出CSV的代码

首先补充必要的导入类(你已有的Jsoup相关导入可以保留):

import java.io.FileWriter;
import java.io.IOException;
import java.util.stream.Collectors;

核心逻辑代码:

public class UsMarketCrawler {
    public static void main(String[] args) throws IOException {
        Document document = Jsoup.connect("https://www.investing.com/markets/united-states").get();
        Elements rows = document.select("tr");
        // 初始化CSV文件写入器,指定输出文件路径为项目根目录的us_market_data.csv
        try (FileWriter csvWriter = new FileWriter("us_market_data.csv")) {
            rows.forEach(row -> {
                // 提取当前行下所有单元格的独立文本
                Elements cells = row.select("td, th");
                String csvRow = cells.stream()
                        // 处理特殊字符,避免CSV格式错乱
                        .map(cell -> {
                            String text = cell.text().trim();
                            // 内容包含逗号、双引号、换行时,用双引号包裹,内容中原有的双引号替换为两个双引号
                            if (text.contains(",") || text.contains("\"") || text.contains("\n")) {
                                text = "\"" + text.replace("\"", "\"\"") + "\"";
                            }
                            return text;
                        })
                        .collect(Collectors.joining(","));
                // 写入行数据并换行
                try {
                    csvWriter.write(csvRow + "\n");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // 控制台打印用于验证
                System.out.println(csvRow);
            });
        }
    }
}
注意事项
  • 代码运行成功后,会在项目根目录生成us_market_data.csv文件,表格工具、文本编辑器都可以正常打开,行列自动对齐
  • 如果遇到反爬拦截,可以给Jsoup请求添加User-Agent头,连接代码修改为如下即可:
    Document document = Jsoup.connect("https://www.investing.com/markets/united-states")
            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
            .get();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:45:04