Java简易爬虫核心是HttpURLConnection获取网页内容和Files写入文件,配合Jsoup解析HTML,设置User-Agent、超时与重定向,确保UTF-8编码保存数据。

用Java写一个简易爬虫并保存数据,核心在于“获取网页内容”和“写入本地文件”两步,中间穿插解析与格式处理。不需要复杂框架,JDK自带的HttpURLConnection和Files类就足够支撑基础需求。
用HttpURLConnection发起HTTP请求
这是最轻量、无需第三方依赖的网络请求方式。注意设置请求头模拟浏览器访问,避免被简单反爬拦截;同时要处理重定向、超时和异常。
- 设置
connectTimeout和readTimeout(建议3000~5000毫秒) - 添加
User-Agent头,例如:"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" - 调用
setInstanceFollowRedirects(true)支持自动跳转 - 用
getInputStream()读取响应体,配合BufferedReader按行解析更稳妥
用Jsoup快速提取网页结构化数据
如果目标页面是HTML,直接用正则匹配容易出错。引入Jsoup(单jar,约300KB)能以jQuery风格选择元素,大幅提升开发效率和健壮性。
- Maven依赖:
org.jsoup jsoup 1.17.2 - 加载网页:
Document doc = Jsoup.connect(url).timeout(5000).userAgent(ua).get(); - 提取标题:
String title = doc.select("title").text(); - 提取所有文章链接:
Elements links = doc.select("a[href^=http]");
用Files或BufferedWriter安全写入文件
保存文本数据推荐使用Files.write()(JDK7+),简洁且自动处理编码与关闭流;若需逐行写入或追加,用BufferedWriter更灵活。
立即学习“Java免费学习笔记(深入)”;
- 一次性写入字符串:
Files.write(Paths.get("data.txt"), content.getBytes(StandardCharsets.UTF_8)); - 追加写入(含换行):
Files.write(Paths.get("log.txt"), (line + "\n").getBytes(), StandardOpenOption.CREATE, StandardOpenOption.APPEND); - 确保UTF-8编码,避免中文乱码;路径建议用
Paths.get()而非字符串拼接 - 如需CSV格式,可用
String.join(",", fields)拼接,并统一用Files.write()保存
整合逻辑:一个可运行的最小示例
以下代码抓取网页标题并保存为output.txt,无外部依赖(仅需Jsoup):
public class SimpleCrawler {
public static void main(String[] args) throws IOException {
String url = "https://example.com";
Document doc = Jsoup.connect(url)
.timeout(5000)
.userAgent("Mozilla/5.0")
.get();
String title = doc.title();
String content = "URL: " + url + "\nTitle: " + title + "\nTime: " + new Date();
Files.write(Paths.get("output.txt"), content.getBytes(StandardCharsets.UTF_8));
System.out.println("已保存:" + title);
}
}
实际项目中可扩展为循环抓取多个URL、用ExecutorService并发、加日志、或导出为JSON/Excel——但底层仍是网络请求 + IO写入这两层协作。










