Java爬虫之下载IMDB中Top250电影的图片
介紹
??在博客:Scrapy爬蟲(chóng)(4)爬取豆瓣電影Top250圖片中我們利用Python的爬蟲(chóng)框架Scrapy,將豆瓣電影Top250圖片下載到自己電腦上。那么,在Java的爬蟲(chóng)的也可以下載圖片嗎?答案當(dāng)然是肯定的!
??在本次分享中,我們將利用Java的Jsoup包和FileUtils.copyURLToFile()函數(shù)來(lái)實(shí)現(xiàn)圖片的下載。我們將會(huì)爬取IMDB中Top250電影的圖片到自己電腦上,其網(wǎng)頁(yè)截圖如下:
思路
??我們實(shí)現(xiàn)圖片下載的爬蟲(chóng)思路如下:
- 利用Jsoup解析網(wǎng)頁(yè),得到電影圖片的url和name
- 利用FileUtils.copyURLToFile()函數(shù)將圖片下載到本地
準(zhǔn)備
??在本文程序中,除了Jsoup包外,還用到了commons-io包,其下載地址為:https://mvnrepository.com/artifact/org.apache.commons/commons-io ,我們主要利用該package中的FileUtils.copyURLToFile(). 讀者需要下載這兩個(gè)包,并將它們?cè)贓clipse中加入到項(xiàng)目的路徑中。
程序
??本次分享的主要程序?yàn)镮mageScraper.java,其完整代碼如下:
package wikiScrape;/* 本爬蟲(chóng)爬取http://www.imdb.cn/IMDB250/中Top250的圖片* 先利用Jsoup解析得到該網(wǎng)頁(yè)中的圖片的url* 然后利用FileUtils.copyURLToFile()函數(shù)將圖片下載到本地*/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("爬蟲(chóng)開(kāi)始......");// 爬取的網(wǎng)址列表,一共十個(gè)網(wǎng)頁(yè)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/"; // 圖片儲(chǔ)存目錄// 利用循環(huán)下載每個(gè)頁(yè)面中的圖片for(String url: urls) {int index = urls.indexOf(url)+1;System.out.println("開(kāi)始下載第"+index+"個(gè)網(wǎng)頁(yè)中的圖片...");getPictures(url, dir);System.out.println("第"+index+"個(gè)網(wǎng)頁(yè)中的圖片下載完畢!\n");}System.out.println("程序運(yùn)行完畢!");Date d2 = new Date();// 計(jì)算程序的運(yùn)行時(shí)間,并輸出long seconds = (d2.getTime()-d1.getTime())/1000;System.out.println("一共用時(shí): "+seconds+"秒.");}// getContent()函數(shù): 將網(wǎng)頁(yè)中的電影圖片下載到本地public static void getPictures(String url, String dir){// 利用URL解析網(wǎng)址URL urlObj = null;try{urlObj = new URL(url);}catch(MalformedURLException e){System.out.println("The url was malformed!");}// URL連接URLConnection urlCon = null;try{// 打開(kāi)URL連接urlCon = urlObj.openConnection(); // 將HTML內(nèi)容解析成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, nameString picture_url = pic_block.get(i).getElementsByTag("img").attr("src");String picture_name = pic_block.get(i).getElementsByClass("bb").text()+".jpg";// 用download()函數(shù)將電影圖片下載到本地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()函數(shù)利用圖片的url將圖片下載到本地public static void download(String url, String dir, String filename) { try { /* httpurl: 圖片的url* dirfile: 圖片的儲(chǔ)存目錄*/URL httpurl = new URL(url); File dirfile = new File(dir); // 如果圖片儲(chǔ)存的目錄不存在,則新建該目錄if (!dirfile.exists()) { dirfile.mkdirs(); } // 利用FileUtils.copyURLToFile()實(shí)現(xiàn)圖片下載FileUtils.copyURLToFile(httpurl, new File(dir+filename)); } catch(Exception e) { e.printStackTrace(); } }}運(yùn)行
??運(yùn)行以上程序,結(jié)果如下:
??查看E盤(pán)中的log文件夾,內(nèi)容如下:
??一共下載了244張圖片,用時(shí)140秒,有幾張圖片下載失敗,效果還算OK.
??本次分享就到此結(jié)束嘍,歡迎大家交流~~
總結(jié)
以上是生活随笔為你收集整理的Java爬虫之下载IMDB中Top250电影的图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器学习—多元线性回归案例
- 下一篇: Java建立长链接的方式_java ht