爬虫爬取的内容存储到文本文件


将爬取到的文本存储起来有多种方法,例如将数据存储到文本文件、数据库或云存储服务。以下是几种常见的存储方法及其 Java 示例:

1. 存储到文本文件

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

public class Main {
    public static void main(String[] args) {
        String text = "爬取到的文本内容";
        String filename = "output.txt";

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
            writer.write(text);
        } catch (IOException e) {
            System.out.println("写入文件时发生错误: " + e.getMessage());
        }
    }
}

这个示例将爬取到的文本内容存储到名为 output.txt 的文件中。您可以修改 textfilename 变量以满足您的需求。

以下是一个使用 Java 和 Jsoup 将爬取到的多个网站文本内容存储到单个文本文件的完整示例:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

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

public class Main {
    public static void main(String[] args) {
        List<String> urls = Arrays.asList(
                "https://example1.com",
                "https://example2.com",
                "https://example3.com"
        );
        String outputFilename = "output.txt";

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilename))) {
            for (String url : urls) {
                try {
                    // 发送请求获取网页内容
                    Document document = Jsoup.connect(url).get();

                    // 获取整个网页的纯文本内容(不包含 HTML 标签)
                    String text = document.text();

                    // 将文本内容写入文件
                    writer.write("URL: " + url + "\n");
                    writer.write(text);
                    writer.write("\n\n");

                    System.out.println("文本已成功保存到文件:" + outputFilename);
                } catch (IOException e) {
                    System.out.println("请求 " + url + " 失败,错误信息: " + e.getMessage());
                }
            }
        } catch (IOException e) {
            System.out.println("写入文件时发生错误: " + e.getMessage());
        }
    }
}

https://example1.comhttps://example2.comhttps://example3.com 替换为您要爬取的网站 URL。这个示例会将爬取到的多个网站的文本内容保存到名为 output.txt 的文件中。每个网站的内容之间用一个空行分隔。

您可以根据需要修改 urls 列表和 outputFilename 变量。

请注意,在实际应用中,请遵守目标网站的爬虫政策,并确保爬虫行为不会对网站造成负担。

以下是一个使用 Java 和 Jsoup 从包含文章链接的网站爬取文章文本内容并下载图片的示例:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String url = "https://example.com/articles";
        String outputFilename = "output.txt";

        try {
            // 发送请求获取网页内容
            Document document = Jsoup.connect(url).get();

            // 获取文章链接
            List<String> articleUrls = new ArrayList<>();
            Elements articleLinks = document.select("a.article-link");
            for (Element link : articleLinks) {
                articleUrls.add(link.absUrl("href"));
            }

            // 爬取每篇文章的文本内容
            try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilename))) {
                for (String articleUrl : articleUrls) {
                    Document articleDocument = Jsoup.connect(articleUrl).get();

                    // 获取文章文本内容
                    String text = articleDocument.text();
                    writer.write("URL: " + articleUrl + "\n");
                    writer.write(text);
                    writer.write("\n\n");

                    // 下载文章中的图片
                    Elements images = articleDocument.select("img");
                    for (Element image : images) {
                        String imageUrl = image.absUrl("src");
                        String imageName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);
                        saveImage(imageUrl, "images/" + imageName);
                    }
                }
            }
        } catch (IOException e) {
            System.out.println("请求失败,错误信息: " + e.getMessage());
        }
    }

    /**
     * 从给定的 URL 下载图片并保存到指定的文件中
     *
     * @param imageUrl  图片的 URL
     * @param imagePath 目标文件路径
     * @throws IOException 如果下载或写入文件时发生错误
     */
    public static void saveImage(String imageUrl, String imagePath) throws IOException {
        try (InputStream in = new URL(imageUrl).openStream();
             OutputStream out = new FileOutputStream(imagePath)) {

            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            System.out.println("下载图片时发生错误: " + e.getMessage());
            throw e;
        }
    }
}

  目录