Java API 爬虫实战:URL、正则与带条件数据提取策略
Java 环境下利用 URL 和 HttpURLConnection 实现基础爬虫,涵盖建立连接、请求设置及数据读取流程。内容包含带条件爬取策略,如基于标签或关键词的数据筛选,以及正则表达式中贪婪与非贪婪匹配的区别。详解 Pattern 与 Matcher 类的使用,并提供反爬规避、性能优化及合规性建议,帮助开发者高效安全地采集网络信息。

Java 环境下利用 URL 和 HttpURLConnection 实现基础爬虫,涵盖建立连接、请求设置及数据读取流程。内容包含带条件爬取策略,如基于标签或关键词的数据筛选,以及正则表达式中贪婪与非贪婪匹配的区别。详解 Pattern 与 Matcher 类的使用,并提供反爬规避、性能优化及合规性建议,帮助开发者高效安全地采集网络信息。

URL、HttpURLConnection 等 API 来实现。建立网络连接:利用 URL 类确定目标网页的地址,再通过 openConnection() 方法获取 HttpURLConnection 对象。
URL url = new URL("https://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
设置请求参数:明确请求方式(GET/POST)以及超时时间等参数。
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
获取响应数据:通过输入流读取网页的内容,并将其转换为字符串进行处理。
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
数据解析与提取:结合字符串处理方法或者正则表达式,从网页源码中提取出目标信息,如链接、文本内容等。
HttpURLConnection:用于发送 HTTP 请求和接收响应,支持设置请求头、获取响应码等操作。InputStream、BufferedReader):这些类的作用是读取网络数据。<a> 标签中的链接,或者 <div> 中的文本内容。Pattern pattern = Pattern.compile("<title>(.*?)</title>");
Matcher matcher = pattern.matcher(htmlContent);
while (matcher.find()) {
String title = matcher.group(1);
if (title.contains("Java")) {
System.out.println(title);
}
}
.* 匹配 <div>content1</div><div>content2</div> 时,会从第一个 <div> 一直匹配到最后一个 </div>。.*? 能够分别匹配两个 <div> 标签内的内容。"<div>(.*)</div>"(贪婪):匹配结果为 "content1content2""<div>(.*?)</div>"(非贪婪):匹配结果为 "content1" 和 "content2".(可匹配任意字符)、*(匹配前导字符 0 次或多次)、+(匹配前导字符 1 次或多次)、?(匹配前导字符 0 次或 1 次)、()(用于分组)等。\d(匹配数字)、\w(匹配字母、数字、下划线)、\s(匹配空白字符)等。表示编译后的正则表达式,可通过 compile() 方法创建实例。
Pattern pattern = Pattern.compile("\\d+"); // 匹配 1 个或多个数字
用于对字符串进行匹配操作,常用方法包括:
Matcher matcher = pattern.matcher("abc123def456");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出:123、456
}
设置合理的请求间隔,可使用 Thread.sleep() 实现;添加请求头来模拟浏览器,例如设置 User-Agent。
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
避免使用过度复杂的表达式,对于频繁使用的正则,提前将其编译为 Pattern 实例,这样可实现复用,减少性能消耗。
爬取数据时,需遵守网站的 robots.txt 协议,避免侵犯隐私或者引发法律风险。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online