java爬虫实战简单用Jsoup框架进行网页爬虫(如抓取网页图片)
2017-08-05 11:41
639 查看
首先去下载Jsoup的jar包,直接百度搜索下载就行了,我下载的jar包版本是1.10.3,然后导入jar包。
我的程序目录结构是这样的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201708/d9f43bddf7eb6e13ee959658d1aeec3e)
我现在要抓取的是http://www.nipic.com/photo/jingguan/shanshui/index.html这个网站的摄影图库中的所有风景图片,其中该图库中的图片有2010页,每页有20张图片,所以我要获取40200张图片,把这些图片全弄到本地磁盘,并且图片还可以查看的,数据也不能丢失。由于本文的着重点不是网页方面的知识而是爬虫方面的,所以这里就不说关于html和css等其他方面的知识了。根据浏览器的开发人员工具研究下要抓取的页面的内容。本文主要通过以下代码供大家学习,可以了解Jsoup框架怎么使用,用途在哪。
因为时间关系所以我代码健壮性没去考虑,大家想深入的可以自己去优化下代码,我的代码如下:
代码运行效果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201708/09483063c65fefbe55afbdc88a53f3dc)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201708/7ee3aaf2317837229dcc73e3e3fd746f)
所有图片都能打开。。。
我的程序目录结构是这样的。
我现在要抓取的是http://www.nipic.com/photo/jingguan/shanshui/index.html这个网站的摄影图库中的所有风景图片,其中该图库中的图片有2010页,每页有20张图片,所以我要获取40200张图片,把这些图片全弄到本地磁盘,并且图片还可以查看的,数据也不能丢失。由于本文的着重点不是网页方面的知识而是爬虫方面的,所以这里就不说关于html和css等其他方面的知识了。根据浏览器的开发人员工具研究下要抓取的页面的内容。本文主要通过以下代码供大家学习,可以了解Jsoup框架怎么使用,用途在哪。
因为时间关系所以我代码健壮性没去考虑,大家想深入的可以自己去优化下代码,我的代码如下:
package com.jiaxun.spider; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.net.URL; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupSpider { // http://www.nipic.com/photo/jingguan/shanshui/index.html?page= 后面的数字逐个加1 // 直到2010 public static String getAllURL(String url) { StringBuffer sb = null; try { sb = new StringBuffer(); for (int i = 1; i <= 2010; i++) { sb.append(url + i).append("\r\n"); } } catch (Exception e) { // TODO: handle exception } return sb.toString(); } // 在大图的网址获取详细的图片地址 public static String getPicURL(String picHrefUrl) { String picURL = null; if (picHrefUrl != null) { try { Document doc = Jsoup.connect(picHrefUrl).get(); Element element = doc.getElementById("J_worksImg"); picURL = element.attr("src"); } catch (Exception e) { // TODO Auto-generated catch block new RuntimeException(" "); } } return picURL; } // 下载图片到本地磁盘 public static void downloadPicToLocal(String picSourceURL, String picDestPath) { BufferedOutputStream bos = null; BufferedInputStream bis = null; try { URL url = new URL(picSourceURL); bis = new BufferedInputStream(url.openStream()); bos = new BufferedOutputStream(new FileOutputStream(picDestPath)); byte[] b = new byte[1024 * 1024]; int len = 0; while ((len = bis.read(b)) != -1) { bos.write(b, 0, len); bos.flush(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block new RuntimeException(" "); } finally { try { bos.close(); } catch (Exception e) { // TODO Auto-generated catch block } try { bis.close(); } catch (Exception e) { // TODO Auto-generated catch block } } } // 获取文件后缀名 public static String getNameExtension(String picURL) { String extension = null; try { int lastIndexOf = 0; if (picURL != null && !picURL.equals("")) { if (picURL.endsWith(".jpg")) lastIndexOf = picURL.lastIndexOf(".jpg"); if (picURL.endsWith(".png")) lastIndexOf = picURL.lastIndexOf(".png"); extension = picURL.substring(lastIndexOf); } } catch (Exception e) { // TODO: handle exception } return extension; } // 通过Jsoup获取网页的单个图片地址_通过传入网页地址和生成图片目录 // 目标网址为http://www.nipic.com/photo/jingguan/shanshui/index.html?page=1 public static boolean getOnePic(String webURL, String picDestURL) { boolean flag = true; try { // webURL="http://www.nipic.com/photo/jingguan/shanshui/index.html?page=" // 后面的数字逐个加1 直到2010 // 创建Document对象,拿到元素对象再操作属性。 File file = new File(picDestURL); if (!file.exists()) { file.mkdir(); } int count = 2220; for (int i = 112; i <= 2010; i++) { // 分2010次拿到每页的网址 try { String mainURL = webURL + i; Document doc = Jsoup.connect(mainURL).get(); // 拿到每个页面的每个class元素 Elements elements = doc.getElementsByClass("relative block works-detail hover-none works-img-box"); for (Element element : elements) { try { // 获取每个页面的大图的网址 String picHrefUrl = element.attr("href"); // 获取每个大图的详细地址 String picURL = getPicURL(picHrefUrl); // 从图片的详细地址开始下载单个图片到本地目标路径 downloadPicToLocal(picUR 9ad9 L, picDestURL + "\\" + (++count) + getNameExtension(picURL)); System.out.println("已抓取" + count + "张图片。"); } catch (Exception e) { // TODO: handle exception } } } catch (Exception e) { // TODO: handle exception } } // 计数器归零 count = 0; } catch (Exception e) { // TODO Auto-generated catch block flag = false; new RuntimeException("在服务器找不到对应图片,正在寻找下一个图片中。。。"); } return flag; } public static void main(String[] args) { boolean result = getOnePic("http://www.nipic.com/photo/jingguan/shanshui/index.html?page=", "G:\\PictureSpider"); System.out.println(result); } }
代码运行效果如下:
所有图片都能打开。。。
相关文章推荐
- java简单实现爬虫、jsoup实现网页抓取、POI实现数据导出Excel
- Python爬虫实战(三):简单爬取网页图片
- Python3简单爬虫抓取网页图片
- Python爬虫学习笔记一:简单网页图片抓取
- JAVA在线抓取网页中的元素的例子(使用JSoup包进行解析)
- java爬虫-简单爬取网页图片
- [Java]中的HttpClient对象实现简单的爬虫,抓取妹子图片
- python爬虫实战(1)抓取网页图片自动保存
- 鱼c笔记——Python爬虫(一):利用urllib进行简单的网页抓取
- java中用jsoup抓取网页源码,并批量下载图片
- Java Jsoup抓取符合指定大小的网页的图片,并保存在本地磁盘
- Java简单实现爬虫技术,抓取整个整个网站所有链接+图片+文件(思路+代码)
- java爬虫框架——jsoup的简单使用(爬取电影天堂的所有电影的信息,包括下载的链接)
- [Java爬虫] 使用 Jsoup + HttpClient 爬取网页图片
- JAVA在线抓取网页中的元素的例子(使用JSoup包进行解析)
- java爬虫-简单爬取网页图片《二》
- Python3简单爬虫抓取网页图片
- java爬虫实战(1):抓取信息门户网站中的图片及其他文件并保存至本地
- java爬虫(使用jsoup设置代理,抓取网页内容)
- 【jsoup爬虫2】用jsoup来实现简单的java爬虫-图片篇