用java一个爬取图片的爬虫
时间: 2023-09-01 15:11:35 浏览: 84
以下是一个使用Java爬取图片的爬虫示例:
```java
import java.io.*;
import java.net.*;
import java.util.regex.*;
public class ImageCrawler {
public static void main(String[] args) throws Exception {
String url = "https://www.example.com"; // 要爬取图片的网站
String pattern = "<img\\s+src=\"([^\"]+)\""; // 图片地址的正则表达式
Pattern imgPattern = Pattern.compile(pattern);
Matcher matcher;
URLConnection conn;
BufferedReader reader;
String line;
while (true) {
// 读取网页内容
conn = new URL(url).openConnection();
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
// 匹配图片地址并下载图片
matcher = imgPattern.matcher(builder.toString());
while (matcher.find()) {
String imgUrl = matcher.group(1);
if (imgUrl.startsWith("http")) { // 只下载http协议的图片
URL imgURL = new URL(imgUrl);
InputStream in = imgURL.openStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
in.close();
out.close();
// 保存图片到本地文件夹
String fileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1);
FileOutputStream fos = new FileOutputStream(new File("images", fileName));
fos.write(out.toByteArray());
fos.close();
System.out.println("Downloaded " + fileName);
}
}
// 获取下一页的链接
matcher = Pattern.compile("<a\\s+href=\"([^\"]+)\"\\s*>下一页</a>").matcher(builder.toString());
if (matcher.find()) {
url = matcher.group(1);
} else {
break; // 已经到了最后一页
}
}
}
}
```
这个爬虫会先读取指定网站的内容,然后匹配其中的图片地址并逐一下载到本地文件夹中。爬虫还可以自动翻页,直到最后一页为止。请注意,这个爬虫只能爬取http协议的图片,因为下载https协议的图片需要证书认证。如果需要爬取https协议的图片,可以尝试使用Jsoup等第三方库。
阅读全文