当前位置:首页 > Java

java如何写一个爬虫

2026-03-19 07:38:00Java

Java爬虫实现方法

使用Jsoup库解析HTML

Jsoup是一款Java的HTML解析库,适合处理静态网页。添加Maven依赖:

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

基础爬取示例代码:

Document doc = Jsoup.connect("https://example.com").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
    System.out.println(link.attr("href"));
}

使用HttpClient处理动态请求

Apache HttpClient适合需要处理Cookie、Header等复杂HTTP请求的场景。添加依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

GET请求示例:

CloseableHttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet("https://api.example.com/data");
CloseableHttpResponse response = client.execute(request);
String responseBody = EntityUtils.toString(response.getEntity());

处理JavaScript渲染页面

对于动态加载内容的页面,可使用Selenium WebDriver。需先安装浏览器驱动,添加依赖:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.8.1</version>
</dependency>

示例代码:

WebDriver driver = new ChromeDriver();
driver.get("https://dynamic.example.com");
WebElement element = driver.findElement(By.cssSelector(".dynamic-content"));
System.out.println(element.getText());
driver.quit();

数据存储处理

爬取数据可存储到文件或数据库。JDBC示例:

String url = "jdbc:mysql://localhost:3306/crawler";
Connection conn = DriverManager.getConnection(url, "user", "password");
PreparedStatement stmt = conn.prepareStatement("INSERT INTO pages(url, content) VALUES(?,?)");
stmt.setString(1, pageUrl);
stmt.setString(2, pageContent);
stmt.executeUpdate();

遵守robots.txt规则

在爬取前应检查目标网站的robots.txt文件,可使用以下代码:

String robotsUrl = "https://example.com/robots.txt";
Document robotsDoc = Jsoup.connect(robotsUrl).get();
System.out.println(robotsDoc.body().text());

异常处理和限速

添加适当的异常处理和请求间隔:

try {
    Thread.sleep(1000); // 1秒间隔
    Document doc = Jsoup.connect(url)
            .timeout(10000)
            .userAgent("Mozilla/5.0")
            .get();
} catch (IOException e) {
    System.err.println("Error fetching URL: " + url);
}

使用代理IP

应对反爬机制可配置代理:

java如何写一个爬虫

System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");
Document doc = Jsoup.connect(url).get();

注意:实际开发中应遵守网站服务条款,避免对目标服务器造成过大负荷。

标签: 爬虫如何写
分享给朋友:

相关文章

React如何写popover

React如何写popover

使用React创建Popover React中实现Popover可以通过多种方式,包括使用第三方库或自定义组件。以下是几种常见方法: 使用Material-UI库 Material-UI提供了现成的…

react插件如何写

react插件如何写

React 插件开发基础 React 插件通常以 npm 包形式发布,核心是通过封装可复用的组件或逻辑供其他项目调用。需要遵循 React 组件设计规范,并考虑兼容性、性能优化和文档完整性。 项目初…

react中如何写proxy

react中如何写proxy

在React中配置代理(Proxy)通常用于解决开发环境下的跨域问题,或转发API请求到后端服务器。以下是几种常见实现方式: 使用package.json配置 在React项目的package.js…

java如何写一个接口

java如何写一个接口

在Java中编写接口的基本语法 接口使用interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。以下是基础语法示例: public interface MyInterface {…

java如何写接口

java如何写接口

Java 接口的基本语法 在 Java 中,接口通过 interface 关键字定义。接口可以包含抽象方法、默认方法、静态方法和常量。以下是接口的基本语法: public interface M…

java如何写

java如何写

Java 基础语法 Java 是一种面向对象的编程语言,语法清晰且结构严谨。以下是 Java 的基本语法规则和示例: 类定义 Java 程序的基本单位是类,每个 Java 程序至少包含一个类。类名…