用java完成如下功能:爬取指定网站的指定类型资源(图片、视频等),直接给出代码案例
时间: 2023-08-31 16:43:40 浏览: 176
### 回答1:
好的,我们可以使用 Java 的网络编程库,例如 java.net.URL 和 java.net.HttpURLConnection 类来实现爬取网站的资源功能。
这里是一个简单的例子,它使用 URL 和 HttpURLConnection 类来爬取指定网站的图片资源:
```
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImageCrawler {
public static void main(String[] args) throws IOException {
// 要爬取的网站地址
String siteUrl = "https://www.example.com";
// 要爬取的图片类型
String imageType = "image/jpeg";
// 创建 URL 对象
URL url = new URL(siteUrl);
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方法
conn.setRequestMethod("GET");
// 设置请求头信息
conn.setRequestProperty("Accept", imageType);
// 发送请求
conn.connect();
// 获取响应状态码
int responseCode = conn.getResponseCode();
// 如果响应码为 200,说明请求成功
if (responseCode == HttpURLConnection.HTTP_OK) {
// 获取响应输入流
InputStream inputStream = conn.getInputStream();
// 将响应输入流转换为字节数组
byte[] bytes = inputStream.readAllBytes();
// 关闭输入流
inputStream.close();
// 处理爬取的图片资源
// 可以将字节数组写入文件或者使用其他方式处理
}
// 关闭连接
conn.disconnect();
}
}
```
上面的代码使用了 Java 9 中引入的 InputStream.readAllBytes() 方法,如果
### 回答2:
使用Java实现爬取指定网站的指定类型资源可以借助Jsoup库和下载类实现。以下是一个演示的代码案例,用于爬取指定网站的图片资源:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
public class WebCrawler {
public static void main(String[] args) {
String url = "https://example.com"; // 指定要爬取的网站
String type = "img"; // 指定要爬取的资源类型 (可以是img, video, 等等)
try {
Document doc = Jsoup.connect(url).get();
Elements elements = doc.select(type); // 使用CSS选择器选择指定类型的元素
for (Element element : elements) {
String src = element.absUrl("src"); // 获取资源的绝对路径
// 下载资源
String fileName = src.substring(src.lastIndexOf("/") + 1);
URL imageUrl = new URL(src);
BufferedInputStream in = new BufferedInputStream(imageUrl.openStream());
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer, 0, 1024)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.close();
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
请注意,此代码只是一个简单的示例,需要根据实际需求进行修改和优化。在实际开发中,还需要添加异常处理、线程池和其他一些功能,以确保代码的稳定性和可靠性。
### 回答3:
以下是使用Java实现爬取指定网站指定类型资源(图片、视频等)的代码案例:
```java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class WebCrawler {
public static void main(String[] args) {
String urlStr = "http://example.com"; // 要爬取的网站URL
String fileType = "image/jpeg"; // 要爬取的资源类型
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
if (conn.getResponseCode() == 200) {
BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
String contentType = conn.getHeaderField("Content-Type");
if (contentType != null && contentType.contains(fileType)) {
String fileName = url.getFile();
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.close();
in.close();
System.out.println("成功下载资源:" + fileName);
} else {
System.out.println("指定类型资源未找到");
}
} else {
System.out.println("连接失败");
}
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
上述代码使用Java的`HttpURLConnection`类进行网页的请求和连接操作,通过获取HTTP头部中的`Content-Type`来判断资源类型,然后使用`BufferedInputStream`和`BufferedOutputStream`进行文件的读取和保存操作。
阅读全文