当前位置:首页 > 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如何写列表

react如何写列表

在React中渲染列表的方法 使用map方法遍历数组生成列表元素 React中通常通过JavaScript的map方法将数组数据转换为React元素数组。每个列表项需要包含唯一的key属性以提高渲染性…

react native 如何写组件

react native 如何写组件

React Native 组件开发指南 React Native 组件开发主要分为两种类型:函数组件和类组件。以下分别介绍两种组件的写法及核心概念。 函数组件写法 函数组件是 React Nativ…

react中如何写proxy

react中如何写proxy

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

react中如何写重置按钮

react中如何写重置按钮

重置按钮的实现方法 在React中,重置按钮通常用于将表单或组件的状态恢复到初始值。以下是几种常见的实现方式: 使用表单的reset方法 对于原生HTML表单元素,可以直接调用reset()方法:…

katalon如何写react用例

katalon如何写react用例

在Katalon中编写React应用测试用例 React应用通常使用动态生成的元素和虚拟DOM,测试时需要特殊处理。Katalon提供多种方法来应对React的特性。 元素定位策略 使用XPath或…

react模拟受控组件如何写

react模拟受控组件如何写

模拟受控组件的实现方式 在React中,受控组件是指表单元素(如input、textarea、select)的值由React的state控制,并通过onChange事件更新state。以下是模拟受控组…