相关文章推荐

在博客: Scrapy爬虫(4)爬取豆瓣电影Top250图片 中我们利用Python的爬虫框架Scrapy,将豆瓣电影Top250图片下载到自己电脑上。那么,在Java的爬虫的也可以下载图片吗?答案当然是肯定的!
在本次分享中,我们将利用Java的Jsoup包和FileUtils.copyURLToFile()函数来实现图片的下载。我们将会爬取IMDB中Top250电影的图片到自己电脑上,其网页截图如下:

/* 本爬虫爬取http://www.imdb.cn/IMDB250/中Top250的图片 * 先利用Jsoup解析得到该网页中的图片的url * 然后利用FileUtils.copyURLToFile()函数将图片下载到本地 import java.io.*; import java.net.*; import java.util.Date; import java.util.ArrayList; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup. select .Elements; import org.apache.commons.io.FileUtils; public class ImageScraper { public static void main (String[] args) { Date d1 = new Date(); System. out .println( "爬虫开始......" ); // 爬取的网址列表,一共十个网页 ArrayList<String> urls = new ArrayList<String>(); urls.add( "http://www.imdb.cn/IMDB250/" ); for ( int i= 2 ; i<= 10 ; i++) { urls.add( "http://www.imdb.cn/imdb250/" + Integer.toString(i)); String dir = "E://log/" ; // 图片储存目录 // 利用循环下载每个页面中的图片 for (String url: urls) { int index = urls.indexOf(url)+ 1 ; System. out .println( "开始下载第" +index+ "个网页中的图片..." ); getPictures(url, dir); System. out .println( "第" +index+ "个网页中的图片下载完毕!\n" ); System. out .println( "程序运行完毕!" ); Date d2 = new Date(); // 计算程序的运行时间,并输出 long seconds = (d2.getTime()-d1.getTime())/ 1000 ; System. out .println( "一共用时: " +seconds+ "秒." ); // getContent()函数: 将网页中的电影图片下载到本地 public static void getPictures (String url, String dir){ // 利用URL解析网址 URL urlObj = null ; try { urlObj = new URL(url); catch (MalformedURLException e){ System. out .println( "The url was malformed!" ); // URL连接 URLConnection urlCon = null ; try { // 打开URL连接 urlCon = urlObj.openConnection(); // 将HTML内容解析成UTF-8格式 Document doc = Jsoup.parse(urlCon.getInputStream(), "utf-8" , url); // 提取电影图片所在的HTML代码块 Elements elems = doc.getElementsByClass( "ss-3 clear" ); Elements pic_block = elems.first().getElementsByTag( "a" ); for ( int i= 0 ; i<pic_block.size(); i++) { // 提取电影图片的url, name String picture_url = pic_block. get (i).getElementsByTag( "img" ).attr( "src" ); String picture_name = pic_block. get (i).getElementsByClass( "bb" ).text()+ ".jpg" ; // 用download()函数将电影图片下载到本地 download(picture_url, dir, picture_name); System. out .println( "第" +(i+ 1 )+ "张图片下载完毕!" ); catch (IOException e){ System. out .println( "There was an error connecting to the URL" ); // download()函数利用图片的url将图片下载到本地 public static void download (String url, String dir, String filename) { try { /* httpurl: 图片的url * dirfile: 图片的储存目录 URL httpurl = new URL(url); File dirfile = new File(dir); // 如果图片储存的目录不存在,则新建该目录 if (!dirfile.exists()) { dirfile.mkdirs(); // 利用FileUtils.copyURLToFile()实现图片下载 FileUtils.copyURLToFile(httpurl, new File(dir+filename)); catch (Exception e) { e.printStackTrace();

运行以上程序,结果如下:

查看E盘中的log文件夹,内容如下:

下载的电影图片

一共下载了244张图片,用时140秒,有几张图片下载失败,效果还算OK.
本次分享就到此结束喽,欢迎大家交流~~

爬虫实例——爬取豆瓣网 top250 电影的信息

本节通过一个具体的实例来看下编写爬虫的具体过程。以爬取豆瓣网 top250 电影的信息为例,top250 电影的网址为:https://movie.douban.com/top250。在浏览器的地址栏里输入 https://movie.douban.com/top250,我们会看到如下内容:
一、豆瓣音乐 今天爬的是豆瓣音乐top250,比较简单,主要是练练手。 1、加了请求头,本来没加,调试几次突然没数据了,加了请求头开始也没好,后来又好了,可能是网络原因; 2、这次是进入信息页爬的数据,上次爬电影没采用这种方法,缺少了部分数据; 3、数据的预处理用了很多if函数 1、部分数据可以见上图 2、中国音乐作者还是很多的。
 
推荐文章