网页爬虫抓取百度图片(一下网络爬虫的大概论述和介绍,你了解多少?)
优采云 发布时间: 2022-01-17 08:07网页爬虫抓取百度图片(一下网络爬虫的大概论述和介绍,你了解多少?)
上午我们了解了网络爬虫的一般讨论和介绍,了解了网络爬虫的现状和现状。在这篇博文中,我们将通过学习一个爬虫示例来了解更多关于如何使用网络爬虫的知识,并使其对我们更好。更有趣的工作。
例子的目的:通过分析特定的url,下载url路径下的所有图片。由于学习水平有限,本例中没有对url进行循环爬取。
爬取工作主要分为三个步骤:
1、获取页面源代码
2、分析源码,找到源码中的图片标签
3、网络编程,下载图片
首先,我们来看看项目的整体结构:
示例如下:
package cn.edu.lnu.crawler;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Util {
// 地址
private static final String URL = "http://www.tooopen.com/view/1439719.html";
// 获取img标签正则
private static final String IMGURL_REG = "]*?>";
// 获取src路径的正则
private static final String IMGSRC_REG = "[a-zA-z]+://[^\\s]*";
// 获取html内容
public static String getHTML(String srcUrl) throws Exception {
URL url = new URL(srcUrl);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
StringBuffer buffer = new StringBuffer();
while ((line = br.readLine()) != null) {
buffer.append(line);
buffer.append("\n");
}
br.close();
isr.close();
is.close();
return buffer.toString();
}
// 获取image url地址
public static List getImageURL(String html) {
Matcher matcher = Pattern.compile(IMGURL_REG).matcher(html);
List list = new ArrayList();
while (matcher.find()) {
list.add(matcher.group());
}
return list;
}
// 获取image src地址
public static List getImageSrc(List listUrl) {
List listSrc = new ArrayList();
for (String img : listUrl) {
Matcher matcher = Pattern.compile(IMGSRC_REG).matcher(img);
while (matcher.find()) {
listSrc.add(matcher.group().substring(0,
matcher.group().length() - 1));
}
}
return listSrc;
}
// 下载图片
private static void Download(List listImgSrc) {
try {
// 开始时间
Date begindate = new Date();
for (String url : listImgSrc) {
// 开始时间
Date begindate2 = new Date();
String imageName = url.substring(url.lastIndexOf("/") + 1,
url.length());
URL uri = new URL(url);
InputStream in = uri.openStream();
FileOutputStream fo = new FileOutputStream(new File(imageName));// 文件输出流
byte[] buf = new byte[1024];
int length = 0;
System.out.println("开始下载:" + url);
while ((length = in.read(buf, 0, buf.length)) != -1) {
fo.write(buf, 0, length);
}
// 关闭流
in.close();
fo.close();
System.out.println(imageName + "下载完成");
// 结束时间
Date overdate2 = new Date();
double time = overdate2.getTime() - begindate2.getTime();
System.out.println("耗时:" + time / 1000 + "s");
}
Date overdate = new Date();
double time = overdate.getTime() - begindate.getTime();
System.out.println("总耗时:" + time / 1000 + "s");
} catch (Exception e) {
System.out.println("下载失败");
}
}
public static void main(String[] args) throws Exception {
String html = getHTML(URL);
List listUrl = getImageURL(html);
/*
* for(String img : listUrl){ System.out.println(img); }
*/
List listSrc = getImageSrc(listUrl);
/*
* for(String img : listSrc){ System.out.println(img); }
*/
Download(listSrc);
}
}
下载结果如下图所示:
接下来我会继续研究爬虫技术,把我的学习总结记录在博客上。欢迎来到我的下一个博客。