java爬虫案例

以下是一个简单的Java爬虫案例,使用了 Jsoup 和 Apache HttpClient 两个常用的库来实现网页内容的爬取和解析。这个案例会演示如何获取网页的HTML内容、解析HTML并提取所需数据。

示例:使用Jsoup爬取网页内容

  1. 添加依赖

在项目中添加以下依赖(以Maven为例):

<!-- Jsoup 用于HTML解析 -->

<dependency>

<groupId>org.jsoup</groupId>

<artifactId>jsoup</artifactId>

<version>1.15.4</version>

</dependency>

  1. 爬虫代码

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import java.io.IOException;

public class SimpleWebCrawler {

public static void main(String[] args) {

String url = "https://www.baidu.com"; // 目标网页

try {

// 使用Jsoup连接网页

Document document = Jsoup.connect(url)

.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")

.timeout(10000)

.get();

// 打印网页标题

System.out.println("网页标题: " + document.title());

// 解析HTML,提取所有链接

Elements links = document.select("a[href]");

System.out.println("网页中的链接:");

for (Element link : links) {

System.out.println("链接文本: " + link.text() + ", 链接地址: " + link.attr("href"));

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

  1. 代码说明

• Jsoup.connect(url):连接目标网页。

• userAgent:模拟浏览器的用户代理,避免被服务器识别为爬虫。

• timeout:设置连接超时时间。

• document.title():获取网页的标题。

• document.select("a[href]"):使用CSS选择器提取所有带有href属性的<a>标签。

示例:使用Apache HttpClient获取网页内容

  1. 添加依赖

在项目中添加以下依赖(以Maven为例):

<!-- Apache HttpClient 用于发送HTTP请求 -->

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.5.13</version>

</dependency>

  1. 爬虫代码

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 HttpClientCrawler {

public static void main(String[] args) {

String url = "https://www.baidu.com"; // 目标网页

try (CloseableHttpClient httpClient = HttpClients.createDefault()) {

// 创建HTTP GET请求

HttpGet httpGet = new HttpGet(url);

httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36");

// 执行请求

CloseableHttpResponse response = httpClient.execute(httpGet);

// 检查响应状态

if (response.getStatusLine().getStatusCode() == 200) {

// 获取响应内容

String content = EntityUtils.toString(response.getEntity(), "UTF-8");

System.out.println("网页内容: " + content.substring(0, 100) + "..."); // 打印前100个字符

}

response.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

  1. 代码说明

• HttpClients.createDefault():创建一个默认的HTTP客户端。

• HttpGet:发送GET请求。

• setHeader:设置请求头,模拟浏览器的用户代理。

• execute:执行请求并获取响应。

• EntityUtils.toString:将响应内容转换为字符串。

注意事项

  1. 遵守法律法规:爬取网页内容时,确保遵守目标网站的robots.txt规则,不要爬取禁止访问的内容。

  2. 礼貌爬虫:设置合理的请求间隔,避免对目标服务器造成过大压力。

  3. 处理异常:确保代码能够处理网络异常、超时等问题。

  4. 反爬机制:一些网站可能会检测爬虫行为,可以通过设置代理、动态IP等方式规避。

扩展功能

• 爬取图片:解析HTML中的<img>标签,下载图片。

• 动态网页爬取:使用Selenium或Jsoup结合WebDriver来处理JavaScript渲染的网页。

• 分布式爬虫:使用爬虫框架(如WebMagic、Scrapy)来实现分布式爬取。

如果你有具体的需求,可以告诉我,我可以为你提供更详细的代码示例!

相关推荐
言慢行善32 分钟前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星38 分钟前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟1 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z1 小时前
常见的限流算法和实现原理
java·开发语言
凭君语未可1 小时前
Java 中的实现类是什么
java·开发语言
He少年1 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新1 小时前
myeclipse的pojie
java·ide·myeclipse
迷藏4942 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4942 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链