如何利用Java和Kotlin实现动态网页内容抓取

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 如何利用Java和Kotlin实现动态网页内容抓取

一、动态网页内容抓取的技术背景
动态网页内容通常是通过JavaScript动态加载的,传统的静态网页抓取工具(如简单的HTTP请求)无法直接获取这些内容。因此,我们需要借助一些技术手段来模拟浏览器行为,或者直接解析动态加载的数据。
1.1 动态网页抓取的挑战
● JavaScript渲染:许多网页依赖JavaScript动态生成内容。
● 反爬虫机制:网站可能会通过IP限制、验证码等方式阻止爬虫。
● 数据格式复杂:动态数据可能以JSON、XML或其他格式嵌入在网页中。
1.2 解决方案
● 使用HttpURLConnection或HttpClient:发送HTTP请求并获取响应。
● 代理服务器:通过代理IP隐藏真实IP,避免被封禁。
● 解析工具:使用正则表达式、HTML解析库(如Jsoup)提取数据。

二、Java和Kotlin在动态网页抓取中的优势
Java和Kotlin是两种广泛使用的编程语言,它们在动态网页抓取中具有以下优势:

  1. 丰富的库支持:Java和Kotlin提供了大量的库和框架,如HttpURLConnection、Jsoup、OkHttp等,用于简化网络请求和HTML解析。
  2. 性能优势:Java和Kotlin的运行效率高,能够处理大规模的数据抓取任务。
  3. 跨平台能力:Java和Kotlin编写的程序可以在多种操作系统上运行,具有良好的跨平台性。
  4. 安全性:通过使用代理服务器,可以隐藏爬虫的真实IP地址,避免被目标网站封禁。
    三、实现动态网页内容抓取的步骤
    3.1 环境准备
    确保已安装JDK(Java Development Kit)并配置好开发环境。本文代码兼容Java和Kotlin。
    3.2 添加依赖
    如果使用Maven构建项目,可以在pom.xml中添加以下依赖:
    3.3 实现代码
    以下是完整的Java和Kotlin实现代码,包含代理服务器的配置。
    Java实现
    ```import java.net.;
    import java.io.
    ;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;

public class DynamicWebScraper {

public static void main(String[] args) {
    String url = "https://example.com"; // 目标网页URL
    String proxyHost = "www.16yun.cn";  // 代理主机
    int proxyPort = 5445;               // 代理端口
    String proxyUser = "16QMSOML";      // 代理用户名
    String proxyPass = "280651";        // 代理密码

    try {
        // 设置代理
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
        Authenticator.setDefault(new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(proxyUser, proxyPass.toCharArray());
            }
        });

        // 创建HTTP连接
        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(proxy);
        connection.setRequestMethod("GET");
        connection.setRequestProperty("User-Agent", "Mozilla/5.0");

        // 获取响应
        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();

            // 使用Jsoup解析HTML
            Document doc = Jsoup.parse(response.toString());
            String title = doc.title();
            System.out.println("网页标题: " + title);

            // 提取动态内容(例如特定标签)
            String dynamicContent = doc.select("div.dynamic-content").text();
            System.out.println("动态内容: " + dynamicContent);
        } else {
            System.out.println("请求失败,响应码: " + responseCode);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Kotlin实现
```import java.net.*
import org.jsoup.Jsoup

fun main() {
    val url = "https://example.com" // 目标网页URL
    val proxyHost = "www.16yun.cn"  // 代理主机
    val proxyPort = 5445            // 代理端口
    val proxyUser = "16QMSOML"      // 代理用户名
    val proxyPass = "280651"        // 代理密码

    try {
        // 设置代理
        val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress(proxyHost, proxyPort))
        Authenticator.setDefault(object : Authenticator() {
            override fun getPasswordAuthentication(): PasswordAuthentication {
                return PasswordAuthentication(proxyUser, proxyPass.toCharArray())
            }
        })

        // 创建HTTP连接
        val connection = URL(url).openConnection(proxy) as HttpURLConnection
        connection.requestMethod = "GET"
        connection.setRequestProperty("User-Agent", "Mozilla/5.0")

        // 获取响应
        val responseCode = connection.responseCode
        if (responseCode == HttpURLConnection.HTTP_OK) {
            val inputStream = connection.inputStream
            val reader = inputStream.bufferedReader()
            val response = reader.readText()

            // 使用Jsoup解析HTML
            val doc = Jsoup.parse(response)
            val title = doc.title()
            println("网页标题: $title")

            // 提取动态内容(例如特定标签)
            val dynamicContent = doc.select("div.dynamic-content").text()
            println("动态内容: $dynamicContent")
        } else {
            println("请求失败,响应码: $responseCode")
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

四、代码解析与优化
4.1 代理服务器的配置
● 通过Proxy类设置代理服务器的主机和端口。
● 使用Authenticator类提供代理的用户名和密码。
4.2 HTTP请求的发送
● 使用HttpURLConnection发送GET请求。
● 设置User-Agent模拟浏览器行为,避免被反爬虫机制拦截。
4.3 HTML内容的解析
● 使用Jsoup库解析HTML文档。
● 通过CSS选择器(如div.dynamic-content)提取动态内容。
4.4 异常处理
● 捕获IOException等异常,确保程序稳定性。

相关文章
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
3天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
1913 100
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
1月前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171370 17
|
10天前
|
Linux iOS开发 MacOS
deepseek部署的详细步骤和方法,基于Ollama获取顶级推理能力!
DeepSeek基于Ollama部署教程,助你免费获取顶级推理能力。首先访问ollama.com下载并安装适用于macOS、Linux或Windows的Ollama版本。运行Ollama后,在官网搜索“deepseek”,选择适合你电脑配置的模型大小(如1.5b、7b等)。通过终端命令(如ollama run deepseek-r1:1.5b)启动模型,等待下载完成即可开始使用。退出模型时输入/bye。详细步骤如下图所示,轻松打造你的最强大脑。
8412 86
|
1月前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150307 32
|
1天前
|
人工智能 自然语言处理 JavaScript
宜搭上新,DeepSeek 插件来了!
钉钉宜搭近日上线了DeepSeek插件,无需编写复杂代码,普通用户也能轻松调用强大的AI大模型能力。安装后,平台新增「AI生成」组件,支持创意内容生成、JS代码编译、工作汇报等场景,大幅提升工作效率。快来体验这一高效智能的办公方式吧!
876 5
|
2天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
645 5
阿里云PAI部署DeepSeek及调用
|
11天前
|
人工智能 自然语言处理 Java
Spring AI,搭建个人AI助手
本期主要是实操性内容,聊聊AI大模型,并使用Spring AI搭建属于自己的AI助手、知识库。本期所需的演示源码笔者托管在Gitee上(https://gitee.com/catoncloud/spring-ai-demo),读者朋友可自行查阅。
936 41
Spring AI,搭建个人AI助手
|
3天前
|
机器学习/深度学习 人工智能 并行计算
一文了解火爆的DeepSeek R1 | AIGC
DeepSeek R1是由DeepSeek公司推出的一款基于强化学习的开源推理模型,无需依赖监督微调或人工标注数据。它在数学、代码和自然语言推理任务上表现出色,具备低成本、高效率和多语言支持等优势,广泛应用于教育辅导、金融分析等领域。DeepSeek R1通过长链推理、多语言支持和高效部署等功能,显著提升了复杂任务的推理准确性,并且其创新的群体相对策略优化(GRPO)算法进一步提高了训练效率和稳定性。此外,DeepSeek R1的成本低至OpenAI同类产品的3%左右,为用户提供了更高的性价比。
778 10
|
2月前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201994 15
对话 | ECS如何构筑企业上云的第一道安全防线