Java中使用Jsoup爬取网页并写入文件的技术问询
完善Jsoup多页面爬虫并写入本地文件的解决方案
我看你这段代码已经搭好了爬虫的基本框架,但在文件写入逻辑和代码完整性上还有些问题,下面帮你修正并完善,确保能顺利爬取指定页面内容并写入本地文件:
原代码存在的核心问题
- 每次循环都新建
PrintWriter,会直接覆盖之前写入的内容,而且没有正确关闭资源,容易引发IO异常 - 代码未完成,
writer.printl...语句不完整 - 缺少单个页面爬取失败的异常处理,一个页面出错会导致整个程序直接终止
修正后的完整可运行代码
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.io.PrintWriter; public class AudioPageCrawler { public static void main(String[] args) { // 替换成你自己的本地文件路径 String outputFilePath = "C:\\Users\\cholp\\Desktop\\out.txt"; // 使用try-with-resources自动管理文件流,无需手动关闭,避免资源泄漏 try (PrintWriter writer = new PrintWriter(outputFilePath, "UTF-8")) { // 遍历21到29的目标页面 for (int pageNum = 21; pageNum < 30; pageNum++) { String targetUrl = "https://www.super.kg/media/audio/" + pageNum; try { // 模拟浏览器请求,避免被网站识别为爬虫 Document pageDoc = Jsoup.connect(targetUrl) .timeout(6000) .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .get(); // 定位目标内容容器(如果爬取内容不对,需检查页面结构调整选择器) Elements contentItems = pageDoc.select("div.clear"); for (Element item : contentItems) { // 提取并处理内容,替换HTML换行符为文本换行 String rawContent = item.select("div.media_mtspan.video_desc_text").html(); String processedContent = rawContent.replaceAll("<br>", "\n"); // 控制台输出+写入文件 System.out.println(processedContent); writer.println(processedContent); // 添加分隔线,方便区分不同页面/条目(可按需删除) writer.println("=== 页面" + pageNum + "条目分割线 ==="); } System.out.println("第" + pageNum + "页爬取完成"); } catch (IOException e) { // 单个页面爬取失败不影响整体流程 System.err.println("爬取第" + pageNum + "页出错:" + e.getMessage()); } } System.out.println("所有页面爬取完成,内容已写入文件:" + outputFilePath); } catch (IOException e) { System.err.println("初始化文件写入流失败:" + e.getMessage()); } } }
关键改进点说明
- 文件写入逻辑优化:把
PrintWriter初始化放在循环外部,用try-with-resources自动管理资源,既避免文件被重复覆盖,又不用手动处理流关闭 - 异常容错处理:给每个页面的爬取单独加了异常捕获,某个页面出错不会打断整个爬取流程
- 反爬兼容:添加了浏览器
userAgent请求头,降低被目标网站拦截的概率 - 内容可读性优化:添加了页面条目分隔线,方便后续查看文件内容
- 代码完整性:补全了未完成的写入语句,确保逻辑闭环
如果爬取的内容不符合预期,你可以打开目标页面的开发者工具,检查实际HTML结构,调整select()方法里的选择器,确保能准确定位到你需要的内容。
内容的提问来源于stack exchange,提问作者Jypargul CHolponova




