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

如何将Java网页爬虫结果从控制台输出改为保存到文件?

将WebDriver爬取结果保存到文件的实现方法

你可以通过Java的IO类将爬取结果写入文件,以下是两种常用实现方式,同时修正你代码里的缩进逻辑问题:

方法一:使用BufferedWriter逐行写入

这种方式适合逐行处理内容,写入效率较高:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class SpeakerCrawler {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Dejan Kostov\\IdeaProjects\\MavenSigmaSpeakers1\\src\\main\\resources\\chromedriver-74.exe");
        WebDriver driver = new ChromeDriver();
        BufferedWriter writer = null;

        try {
            driver.get("https://sigma.world/eurasia/speakers/");
            // 创建写入流,true表示追加写入,false则覆盖原有内容
            writer = new BufferedWriter(new FileWriter("speakers_result.txt", true));

            String[] expected = {"Gary Vaynerchuk", "John Lee", "Jordan Belfort", "Clinton Sparks", "Johnny Walker", "Dr. Sara Al Madani", "VESA", "Irina S. Litchfield", "Cal Evans", "Dr Jane Thomason", "Gordon Einstein", "Jimmy Nguyen", "Robert Dowling", "Aideen Shortt", "Dustin Plantholt", "Andres Meneses", "Arvin Khamseh", "Agne Linge", "Joshua Ellul", "Mike Prasad", "Paweł Łaskarzewski", "Obediah Ayton", "Jorge Sebastiao", "Wesley Ellul", "Nikita Sachdev", "Joseph F Borg", "Zack Ritchie", "Francisco Fernandez", "Gabriel Laender", "Reem Al Mosabbeh", "Cannelle Maricaux", "Onur Altan Tan", "Jitendra Vaswani", "Marco Funk", "James Bowater", "Susan Oh", "Laura K. Inamedinova", "Isabella Händel", "Tejinder Kumar", "Gustavo Montero", "Adel Bhurtun", "Vas Modinos", "Alexander Fazel", "Alexander Mihailovski", "Marc Taverner", "Pavlina Papalouka", "Emma Todd", "Cordelia Morgan Cooper", "Nick Spanos", "John Murillo", "Alex Tsepaev", "Anna Tutova", "H.E. Mr. Zulfiquar Ghadiyali", "Shafeeq Qureshi", "Bailey Dodds", "Joan de Ramón Brunet", "Amir Student", "Amna Usman Chaudhry", "Ayesha Mubarak Ali", "Nadia Dvoinos", "Mario Nawfal", "Alex J.", "Paula Tavangar", "Cinderella Amar", "Joel Michael", "Kevin Imani", "José. F. Pereira", "Paula Hajduczenia", "Dr Andreas Mathikolonis", "Alena Zharkovskaya", "Edward Condrat", "Wadih Al Sayah", "Aravind Swaminathan","Luca Tagliaferro"};

            List<WebElement> elements = driver.findElements(By.tagName("h3"));

            String countMsg = "Number of elements with tag h3 : " + elements.size();
            System.out.println(countMsg);
            writer.write(countMsg);
            writer.newLine(); // 换行分隔

            for (int i = 0; i < elements.size(); i++) {
                WebElement element = elements.get(i);
                String speakerInfo = i + " : " + element.getText();
                System.out.println(speakerInfo);
                writer.write(speakerInfo);
                writer.newLine();

                String compareResult;
                if (element.getText().equals(expected[i])) {
                    compareResult = "Strings are equal";
                } else {
                    compareResult = "Strings are NOT equal";
                }
                System.out.println(compareResult);
                writer.write(compareResult);
                writer.newLine();
            }
            System.out.println("爬取结果已成功写入文件");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 确保资源正确关闭
            try {
                if (writer != null) {
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            driver.quit();
        }
    }
}

关键说明:

  • BufferedWriter搭配FileWriter实现高效写入,第二个参数true控制是否追加内容到文件。
  • 所有IO操作放在try-catch-finally块中,避免资源泄漏,同时修正了你原代码中driver.quit()的缩进错误,保证爬取完成后再关闭浏览器。

方法二:使用Java 7+的Files类(代码更简洁)

若你的Java版本在7及以上,可直接用Files.write方法一次性写入,无需手动关闭流:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class SpeakerCrawler {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Dejan Kostov\\IdeaProjects\\MavenSigmaSpeakers1\\src\\main\\resources\\chromedriver-74.exe");
        WebDriver driver = new ChromeDriver();
        List<String> resultLines = new ArrayList<>();

        try {
            driver.get("https://sigma.world/eurasia/speakers/");

            String[] expected = {"Gary Vaynerchuk", "John Lee", "Jordan Belfort", "Clinton Sparks", "Johnny Walker", "Dr. Sara Al Madani", "VESA", "Irina S. Litchfield", "Cal Evans", "Dr Jane Thomason", "Gordon Einstein", "Jimmy Nguyen", "Robert Dowling", "Aideen Shortt", "Dustin Plantholt", "Andres Meneses", "Arvin Khamseh", "Agne Linge", "Joshua Ellul", "Mike Prasad", "Paweł Łaskarzewski", "Obediah Ayton", "Jorge Sebastiao", "Wesley Ellul", "Nikita Sachdev", "Joseph F Borg", "Zack Ritchie", "Francisco Fernandez", "Gabriel Laender", "Reem Al Mosabbeh", "Cannelle Maricaux", "Onur Altan Tan", "Jitendra Vaswani", "Marco Funk", "James Bowater", "Susan Oh", "Laura K. Inamedinova", "Isabella Händel", "Tejinder Kumar", "Gustavo Montero", "Adel Bhurtun", "Vas Modinos", "Alexander Fazel", "Alexander Mihailovski", "Marc Taverner", "Pavlina Papalouka", "Emma Todd", "Cordelia Morgan Cooper", "Nick Spanos", "John Murillo", "Alex Tsepaev", "Anna Tutova", "H.E. Mr. Zulfiquar Ghadiyali", "Shafeeq Qureshi", "Bailey Dodds", "Joan de Ramón Brunet", "Amir Student", "Amna Usman Chaudhry", "Ayesha Mubarak Ali", "Nadia Dvoinos", "Mario Nawfal", "Alex J.", "Paula Tavangar", "Cinderella Amar", "Joel Michael", "Kevin Imani", "José. F. Pereira", "Paula Hajduczenia", "Dr Andreas Mathikolonis", "Alena Zharkovskaya", "Edward Condrat", "Wadih Al Sayah", "Aravind Swaminathan","Luca Tagliaferro"};

            List<WebElement> elements = driver.findElements(By.tagName("h3"));

            String countMsg = "Number of elements with tag h3 : " + elements.size();
            System.out.println(countMsg);
            resultLines.add(countMsg);

            for (int i = 0; i < elements.size(); i++) {
                WebElement element = elements.get(i);
                String speakerInfo = i + " : " + element.getText();
                System.out.println(speakerInfo);
                resultLines.add(speakerInfo);

                String compareResult = element.getText().equals(expected[i]) ? "Strings are equal" : "Strings are NOT equal";
                System.out.println(compareResult);
                resultLines.add(compareResult);
            }

            // 一次性写入所有内容,指定UTF-8编码避免乱码
            Files.write(Paths.get("speakers_result.txt"), resultLines, StandardCharsets.UTF_8);
            System.out.println("爬取结果已成功写入文件");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            driver.quit();
        }
    }
}

关键说明:

  • 先将所有待写入内容存入List<String>,再通过Files.write一次性写入,适合内容量不大的场景,代码更简洁。
  • 指定StandardCharsets.UTF_8编码,避免爬取内容含非ASCII字符时出现乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:35:16