当前位置:首页 > Java

java如何爬数据

2026-03-20 18:21:52Java

Java 爬取数据的方法

使用 Jsoup 库解析 HTML

Jsoup 是一个开源的 Java HTML 解析库,适合处理静态网页数据。它提供类似 jQuery 的 DOM 操作方法,能够方便地提取网页内容。

添加依赖(Maven):

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.4</version>
</dependency>

示例代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        String url = "https://example.com";
        Document doc = Jsoup.connect(url).get();
        Elements links = doc.select("a[href]");
        for (Element link : links) {
            System.out.println(link.attr("href"));
        }
    }
}

使用 HttpClient 处理动态内容

对于需要处理 JavaScript 渲染的动态网页,可结合 HttpClient 和 HtmlUnit 等工具。

HttpClient 示例:

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet request = new HttpGet("https://example.com/api/data");
        CloseableHttpResponse response = client.execute(request);
        String html = EntityUtils.toString(response.getEntity());
        System.out.println(html);
    }
}

使用 Selenium 自动化浏览器

当目标网站采用复杂反爬机制时,Selenium 可模拟真实用户操作。

配置示例:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class SeleniumExample {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();
        driver.get("https://example.com");
        String pageSource = driver.getPageSource();
        System.out.println(pageSource);
        driver.quit();
    }
}

数据存储处理

提取后的数据可存入数据库或文件系统。JDBC 示例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class DatabaseExample {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/mydb";
        Connection conn = DriverManager.getConnection(url, "user", "password");
        PreparedStatement stmt = conn.prepareStatement("INSERT INTO data VALUES (?)");
        stmt.setString(1, "extracted data");
        stmt.executeUpdate();
        conn.close();
    }
}

反爬虫策略应对

设置合理间隔:

Thread.sleep(3000); // 3秒延迟

使用代理IP:

System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");

修改请求头:

java如何爬数据

Document doc = Jsoup.connect(url)
    .userAgent("Mozilla/5.0")
    .header("Accept-Language", "en-US")
    .get();

注意:实际开发中应遵守网站的 robots.txt 协议,避免高频请求造成服务器压力。

标签: 数据java
分享给朋友:

相关文章

vue数据劫持实现

vue数据劫持实现

Vue 数据劫持的实现原理 Vue 的数据劫持主要通过 Object.defineProperty 或 Proxy 实现,用于监听数据变化并触发视图更新。以下是核心实现方式: 使用 Object.d…

vue实现重置表格数据

vue实现重置表格数据

重置表格数据的方法 在Vue中重置表格数据通常涉及清空或重新初始化数据绑定的数组或对象。以下是几种常见实现方式: 直接重置数据源 对于基于数组的表格数据,可以直接将数据数组重置为空或初始值: //…

vue实现数据删除

vue实现数据删除

Vue 实现数据删除的方法 在 Vue 中删除数据通常涉及操作数组或对象,并结合响应式更新。以下是几种常见实现方式: 从数组中删除数据 使用 splice 方法删除数组中的指定项: methods…

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io.Fil…

java如何获取当前时间

java如何获取当前时间

获取当前时间的方法 在Java中,可以通过多种方式获取当前时间。以下是几种常见的方法: 使用 java.util.Date Date currentDate = new Date(); Syste…