返回

如何 Docker 化 Selenium、Jsoup 和 MySQL 数据抓取项目?

mysql

使用 Docker 将 Selenium、Jsoup 和 MySQL 数据抓取项目 Docker 化

在本文中,我们将探讨如何将一个使用 Selenium、Jsoup 从多个网站抓取数据并将其插入 MySQL 数据库的 Java 项目 Docker 化。通过 Docker 化,我们可以将应用程序与基础设施解耦,从而简化部署和维护。

问题:

需要将本地运行良好的数据抓取项目部署到服务器上,并以最佳方式进行设置。

解决方案:

Docker 化组件:

  • 应用程序容器: 包含 Selenium 和 Jsoup 代码。
  • 数据库容器: 运行 MySQL 数据库。

应用程序容器:

  • Selenium 服务器模式:
    • 由于我们需要从 Jenkins 运行项目,因此使用 Selenium 服务器更合适。

数据库容器:

  • 网络共享: 应用程序容器和数据库容器需要共享一个网络,以便应用程序能够访问数据库。

Jenkins 管道:

  1. 启动 MySQL 容器。
  2. 启动应用程序容器。
  3. 下载代码并使用 Maven 命令构建应用程序。
  4. 应用程序容器开始运行。

应用程序 Dockerfile:

FROM java:8

# 安装依赖项
RUN apt-get update && apt-get install -y unzip

# 添加 Selenium 服务器
RUN curl -O https://selenium-release.storage.googleapis.com/4.4.0/selenium-server-standalone-4.4.0.jar

# 添加应用程序代码
ADD . /app

# 启动 Selenium 服务器
CMD ["java", "-jar", "selenium-server-standalone-4.4.0.jar", "-port", "4444"]

示例脚本:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;

public class Main {

    public static void main(String[] args) {
        // 连接到 Selenium 服务器
        WebDriver driver = new RemoteWebDriver(new URL("http://selenium-server:4444/wd/hub"), new ChromeOptions());

        // 访问网站并抓取数据
        driver.get("https://example.com");
        String data = driver.getPageSource();

        // 将数据插入 MySQL 数据库
        // ... 省略数据库操作代码 ...

        driver.quit();
    }
}

注意:

  • selenium-server 容器的端口 4444 添加到 docker-compose.yml 文件中,以便应用程序容器能够连接到服务器。
  • 使用带有 -port 参数的 java 命令启动 Selenium 服务器,以指定 Selenium 服务器的端口。
  • 使用 RemoteWebDriver 而不是 ChromeDriver 来连接到 Selenium 服务器。
  • 确保应用程序容器和数据库容器之间的网络共享正确配置。

结论

通过使用 Docker 和遵循上述步骤,我们可以轻松地将我们的数据抓取项目 Docker 化,从而简化部署和维护,并获得 Docker 化带来的所有好处,例如隔离性、可移植性和可扩展性。

常见问题解答

  1. 为什么使用 Selenium 服务器而不是独立模式?

    • 当从 Jenkins 等 CI/CD 系统运行项目时,Selenium 服务器更适合。
  2. 如何连接应用程序容器和数据库容器的网络?

    • docker-compose.yml 文件中指定一个共享网络。
  3. 如何将数据插入 MySQL 数据库?

    • 省略的数据库操作代码应使用 JDBC 或 Hibernate 等技术连接到 MySQL 数据库。
  4. 如何使用 RemoteWebDriver 连接到 Selenium 服务器?

    • 应用程序脚本应使用 new URL("http://selenium-server:4444/wd/hub") 来连接到 Selenium 服务器。
  5. 使用 Docker 有哪些好处?

    • 隔离性、可移植性、可扩展性、简化部署和维护。