Java爬虫之下载IMDB中Top250电影的图片
生活随笔
收集整理的這篇文章主要介紹了
Java爬虫之下载IMDB中Top250电影的图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹
??在博客:Scrapy爬蟲(4)爬取豆瓣電影Top250圖片中我們利用Python的爬蟲框架Scrapy,將豆瓣電影Top250圖片下載到自己電腦上。那么,在Java的爬蟲的也可以下載圖片嗎?答案當然是肯定的!
??在本次分享中,我們將利用Java的Jsoup包和FileUtils.copyURLToFile()函數來實現圖片的下載。我們將會爬取IMDB中Top250電影的圖片到自己電腦上,其網頁截圖如下:
思路
??我們實現圖片下載的爬蟲思路如下:
- 利用Jsoup解析網頁,得到電影圖片的url和name
- 利用FileUtils.copyURLToFile()函數將圖片下載到本地
準備
??在本文程序中,除了Jsoup包外,還用到了commons-io包,其下載地址為:https://mvnrepository.com/artifact/org.apache.commons/commons-io ,我們主要利用該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<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, nameString 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.
??本次分享就到此結束嘍,歡迎大家交流~~
總結
以上是生活随笔為你收集整理的Java爬虫之下载IMDB中Top250电影的图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习—多元线性回归案例
- 下一篇: 抽屉新热榜html源码,利用scrapy