请使用Java语言写出一个网络爬虫爬取网页的文字以及图片的业务。
时间: 2024-06-10 14:03:52 浏览: 85
好的,我可以帮你回答这个问题。以下是使用Java语言编写网络爬虫爬取网页文字和图片的业务代码示例:
```
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.*;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WebCrawler {
private static final Pattern pattern = Pattern.compile("([^\\s]+(\\.(?i)(jpg|png|gif|bmp))$)");
public static void main(String[] args) {
String url = "https://www.example.com";
crawl(url);
}
private static void crawl(String url) {
try {
Document doc = Jsoup.connect(url).get();
String content = doc.text();
saveToFile(content, "content.txt");
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
for (Element image : images) {
String imageUrl = image.attr("src");
saveImage(imageUrl);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void saveToFile(String content, String fileName) {
try (FileWriter writer = new FileWriter(fileName)) {
writer.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void saveImage(String imageUrl) {
try {
Matcher matcher = pattern.matcher(imageUrl);
if (matcher.find()) {
URL url = new URL(imageUrl);
InputStream inputStream = url.openStream();
File file = new File(matcher.group());
OutputStream outputStream = new FileOutputStream(file);
byte[] buffer = new byte[2048];
int length;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这个代码可以爬取指定URL上的网页文字和图片,并将文字保存到文件 content.txt 中,将图片保存到当前目录下以图片URL中的文件名为文件名的文件中。
需要注意的是,这个代码只是一个简单的示例,实际应用中需要考虑更多的异常处理、多线程爬取、重试等问题。
阅读全文