在Java中开发简易爬虫数据保存程序_Java网络与IO结合实践

Java简易爬虫核心是HttpURLConnection获取网页内容

和Files写入文件,配合Jsoup解析HTML,设置User-Agent、超时与重定向,确保UTF-8编码保存数据。

用Java写一个简易爬虫并保存数据,核心在于“获取网页内容”和“写入本地文件”两步,中间穿插解析与格式处理。不需要复杂框架,JDK自带的HttpURLConnectionFiles类就足够支撑基础需求。

用HttpURLConnection发起HTTP请求

这是最轻量、无需第三方依赖的网络请求方式。注意设置请求头模拟浏览器访问,避免被简单反爬拦截;同时要处理重定向、超时和异常。

  • 设置connectTimeoutreadTimeout(建议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.jsoupjsoup1.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更灵活。

  • 一次性写入字符串: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写入这两层协作。