将爬取到的文本存储起来有多种方法,例如将数据存储到文本文件、数据库或云存储服务。以下是几种常见的存储方法及其 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
的文件中。您可以修改 text
和 filename
变量以满足您的需求。
以下是一个使用 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.com
、https://example2.com
和 https://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;
}
}
}