java爬虫图片_Java爬虫之下载IMDB中Top250电影的图片

介绍

在博客:Scrapy爬虫(4)爬取豆瓣电影Top250图片中我们利用Python的爬虫框架Scrapy,将豆瓣电影Top250图片下载到自己电脑上。那么,在Java的爬虫的也可以下载图片吗?答案当然是肯定的!

在本次分享中,我们将利用Java的Jsoup包和FileUtils.copyURLToFile()函数来实现图片的下载。我们将会爬取IMDB中Top250电影的图片到自己电脑上,其网页截图如下:

3ef0cb7386b69ab46b1aa0c532c20274.png

思路

我们实现图片下载的爬虫思路如下:

利用Jsoup解析网页,得到电影图片的url和name

利用FileUtils.copyURLToFile()函数将图片下载到本地

准备

在本文程序中,除了Jsoup包外,还用到了commons-io包,其下载地址为:https://mvnrepository.com/art... ,我们主要利用该package中的FileUtils.copyURLToFile(). 读者需要下载这两个包,并将它们在Eclipse中加入到项目的路径中。

程序

本次分享的主要程序为ImageScraper.java,其完整代码如下:

package wikiScrape;

/* 本爬虫爬取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 urls = new ArrayList();

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

// 提取电影图片的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();

}

}

}

运行

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

30a2f294508f2f1a6314cbdbc5a6b692.png

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

23ede0b6c421dfaf8c52def13fe029dd.png

一共下载了244张图片,用时140秒,有几张图片下载失败,效果还算OK.

本次分享就到此结束喽,欢迎大家交流~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值