🎁 惊喜折扣:订阅享受 1折优惠!

  • 价钱
  • 文档
ZH
联系

© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED

产品

指纹浏览器
Nstbrowser RPA
绕过Cloudflare
Browserless
网页解锁器

解决方案

云端指纹浏览器
多账户管理
网页抓取&自动化
反机器人检测

资源

价格
下载
RPA 市场
联盟计划
合作伙伴
博客
版本更新

支持

联系

文档

法规

条款
隐私政策
Cookie 政策

产品解决方案资源支持法规

产品解决方案资源

支持法规

© 2025 NST LABS TECH LTD. ALL RIGHTS RESERVED

返回博客
使用 Java 进行网页抓取
Web Scraping

2024 年使用 Java 进行网络抓取 - 最详细的指南

本指南重点介绍 2024 年使用 Java 进行网络抓取。它提供了详细的分步教程。现在就开始探索吧!
May 09, 2024Carlos Rivera

网页抓取基础教程

本指南主要介绍 2024 年使用 Java 进行网络抓取的方法。以 ScrapeMe 网站为例,逐步介绍了如何从网站中提取数据。通过使用 Java 和 jsoup 库,您将学会如何抓取静态网页资源和检索特定信息,如产品名称、图像、价格和详细信息等。

本指南帮助您掌握从类似网站中抓取数据的必要技能,并为学习更高级的网络抓取技术打下基础。

现在就开始利用 Java 的强大功能抓取网站吧!

环境要求:

需要注意的是,由于本文中的演示项目将使用 Java,因此在继续之前,请确保您已具备以下先决条件:

推荐环境:

  • Java: 任何 8+ LTS 版本
  • 构建工具: 与本地 Java 版本兼容的任何版本的 Gradle 或 Maven
  • 集成开发环境: 任意首选,如 Eclipse、IntelliJ IDEA、VS Code

注:环境安装过程省略。

案例环境:

JDK 21

javascript Copy
# java -version
java version "21.0.2" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode, sharing)

构建工具:Gradle

javascript Copy
# gradle -version
Gradle 8.7

Build time: 2024-03-22 15:52:46 UTC
Revision: 650af14d7653aa949fce5e886e685efc9cf97c10

Kotlin: 1.9.22
Groovy: 3.0.17
Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM: 21.0.2 (Oracle Corporation 21.0.2+13-LTS-58)
OS: Mac OS X 14.4.1 aarch64

IDE:IntelliJ IDEA

项目创建

项目信息:
创建java项目

创建后,您的项目可能如下所示:

项目显示

添加依赖项,暂时jsoup就足够了(jsoup:Java HTML Parser):

javascript Copy
// gradle => build.gradle => dependencies
implementation 'org.jsoup:jsoup:1.17.2'

让我们正式爬取 ScrapeMe!

现在是爬取网站的最佳时机!这里我爬取的是ScrapeMe,仅供参考。您可以完成阅读完我的所有进度,然后尝试您的项目。

目标站点分析:

首先,让我们看一下我想要从ScrapeMe站点抓取的数据。在浏览器中打开站点并查看源代码以分析目标元素。然后,通过代码检索所需的元素。

ScrapeMe主页产品列表:

ScrapeMe产品主页

ScrapeMe 产品详细信息:

ScrapeMe 产品详细信息
我们的目标是抓取这些产品信息的首页,包括产品名称、产品图片、产品价格和产品详细地址。

页面源码分析

页面元素

通过查看页面元素分析,我们知道当前页面有所有商品页面元素:ul.products,以及每个商品详情元素:li.product。

ScrapeMe页面元素

产品详情

进一步分析发现产品名称:a h2,产品图片:a img.src,产品价格:a span,产品详细地址:a.href。

ScrapeMe产品详情

代码演示

ScrapeMeProduct.java

java Copy
public class ScrapeMeProduct {
  /**
   * product detail url
   */
  private String url;
  /**
   * product image
   */
  private String image;
  /**
   * product name
   */
  private String name;
  /**
   * product price
   */
  private String price;

  // Getters and Setters
  
  @Override
  public String toString() {
    return "{ \"url\":\"" + url + "\", "
        + " \"image\": \"" + image + "\", "
        + "\"name\":\"" + name + "\", "
        + "\"price\": \"" + price + "\" }";
  }
}

Scraper.java

java Copy
import org.jsoup.*;
import org.jsoup.nodes.*;
import org.jsoup.select.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Scraper {
  // scrapeme site url
  private static final String SCRAPEME_SITE_URL = "https://scrapeme.live/shop";

  public static List<ScrapeMeProduct> scrape() {
    // html doc for scrapeme page
    Document doc;
    // products data
    List<ScrapeMeProduct> pokemonProducts = new ArrayList<>();
    try {
      doc = Jsoup.connect(SCRAPEME_SITE_URL)
          .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36") // mock userAgent header
          .header("Accept-Language", "*") // mock Accept-Language header
          .get();
      // select product nodes
      Elements products = doc.select("li.product");
      for (Element product : products) {
        ScrapeMeProduct pokemonProduct = new ScrapeMeProduct();
        pokemonProduct.setUrl(product.selectFirst("a").attr("href")); // parse and set product url
        pokemonProduct.setImage(product.selectFirst("img").attr("src")); // parse and set product image
        pokemonProduct.setName(product.selectFirst("h2").text()); // parse and set product name
        pokemonProduct.setPrice(product.selectFirst("span").text()); // parse and set product price
        pokemonProducts.add(pokemonProduct);
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return pokemonProducts;
  }
}

Main.java

java Copy
import io.xxx.basic.ScrapeMeProduct;
import io.xxx.basic.Scraper;
import java.util.List;

public class Main {
  public static void main(String[] args) {
    List<ScrapeMeProduct> products = Scraper.scrape();
    products.forEach(System.out::println);
    // continue coding
  }
}

结果表达

爬取结果展示

结论

到目前为止我们已经学会了使用Java进行简单的静态页面数据爬取,接下来我们将在此基础上进阶,使用 Java并发程序 爬取ScrapeMe上面的所有产品数据,以及使用Java代码连接到Nstbrowser浏览器进行爬取数据爬取,因为进阶章节会用到Nstbrowser中的无头浏览器等功能。

更多
colly 网络爬取
Web Scraping
使用 Colly 在 Golang 中进行网页抓取的步骤
Golang 是最强大的网络爬虫工具之一。而 Colly 在使用 Go 时提供了很大帮助。阅读这篇博文,了解有关 Colly 的最详细的信息,并学习如何使用 Colly 抓取网站。
Sep 30, 2024Carlos Rivera
Java Web 爬虫
Web Scraping
Java 中的 Web 爬虫:分步教程 2024
Java Web 爬虫可轻松帮助完成 Web 抓取和自动化任务。如何使用 Java Web 爬虫进行 Web 抓取?这里有您想要的一切!
Aug 16, 2024Robin Brown
scray, scray vs beautifulsoup
Web Scraping
Scrapy vs Beautifulsoup - 哪一个更适合您?
Scrapy vs BeautifulSoup,有何异同?哪个更适合您?请在本博客中找出答案。
Jul 31, 2024Carlos Rivera
反检测浏览器
Web Scraping
2024 年最适合网页抓取的反检测浏览器
反检测浏览器可帮助你在搜索网页时隐藏浏览器指纹。它能真正简化你的工作。阅读本博客,了解更多信息!
Jul 19, 2024Robin Brown
Urllib, Urllib3, Requests
Web Scraping
Urllib vs Urllib3 vs Requests:在进行网页抓取时,哪一个最适合您?
Urllib、urllib3 和 request 是 3 个出色且常见的 Python 库。这三个库有什么区别?阅读本文,找到最适合您的那个!
Jul 17, 2024Robin Brown
403 禁止错误
Web Scraping
403 禁止错误: 它是什么?如何修复?
403 错误超级烦人!什么是 403 禁止错误?如何解决?请从本篇博客找到答案。
Jul 12, 2024Robin Brown
目录