java如何爬数据
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");
修改请求头:

Document doc = Jsoup.connect(url)
.userAgent("Mozilla/5.0")
.header("Accept-Language", "en-US")
.get();
注意:实际开发中应遵守网站的 robots.txt 协议,避免高频请求造成服务器压力。






