今天我将使用Java的HttpClient(在Java 11及以上版本中内置)来编写一个入门级的网络爬虫示例。
这个示例将演示如何发送HTTP GET请求,获取响应内容,并处理可能出现的异常。
以下是一个基于Java HttpClient(Java 11+)的网络爬虫基础实现示例,包含详细注释和异常处理:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class WebCrawlerExample {
public static void main(String[] args) {
// 目标URL(请替换为实际需要爬取的网站)
String targetUrl = "https://example.com";
try {
String htmlContent = fetchHtmlContent(targetUrl);
System.out.println("网页内容获取成功!");
System.out.println("获取内容长度:" + htmlContent.length() + " 字符");
// 这里可以添加内容解析逻辑
// parseHtml(htmlContent);
} catch (Exception e) {
System.err.println("爬取失败: " + e.getMessage());
}
}
/**
* 使用HttpClient获取网页HTML内容
* @param url 目标网址
* @return 网页HTML字符串
* @throws Exception 网络请求异常
*/
private static String fetchHtmlContent(String url) throws Exception {
// 1. 创建HttpClient实例
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2) // 使用HTTP/2协议
.connectTimeout(Duration.ofSeconds(10)) // 设置连接超时
.followRedirects(HttpClient.Redirect.NORMAL) // 跟随重定向
.build();
// 2. 构建HTTP请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(15)) // 设置请求超时
.header("User-Agent", "Mozilla/5.0 (compatible; MyCrawler/1.0)") // 设置UA标识
.header("Accept", "text/html") // 指定接受HTML内容
.GET() // GET请求
.build();
// 3. 发送请求并获取响应
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
// 4. 检查HTTP状态码
int statusCode = response.statusCode();
if (statusCode != 200) {
throw new RuntimeException("HTTP错误状态码: " + statusCode);
}
// 5. 返回HTML内容
return response.body();
}
/**
* (示例)HTML内容解析方法
* @param html 网页HTML内容
*/
/*
private static void parseHtml(String html) {
// 实际项目中可使用Jsoup等库解析HTML
System.out.println("解析HTML...");
// 示例:简单提取标题
String title = html.substring(
html.indexOf("<title>") + 7,
html.indexOf("</title>")
);
System.out.println("网页标题: " + title);
}
*/
}
User-Agent
:标识爬虫身份(建议遵守robots.txt规则)timeout
:防止长时间阻塞/robots.txt
的爬取规则https://example.com/robots.txt
Thread.sleep(1000); // 每次请求间隔1秒
Document doc = Jsoup.parse(html); Elements links = doc.select("a[href]");
完整项目建议添加:
以上就是今天我要说简单的入门级爬虫教程,总体的思路是这样,具体操作还得根据项目网站实际情况来做具体的部署,如果大家有啥疑问可以留言讨论。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。