摘要:本次分享將在此基礎(chǔ)上,利用多線程,提高程序運(yùn)行的效率。思路本次分享建立在博客爬蟲之下載中電影的圖片上,總體的爬蟲思路沒有變化,只是在此基礎(chǔ)上引入多線程。
介紹
??在博客:Java爬蟲之下載IMDB中Top250電影的圖片中我們實(shí)現(xiàn)了利用Java爬蟲來下載圖片,但是效率不算太高。本次分享將在此基礎(chǔ)上,利用多線程,提高程序運(yùn)行的效率。
思路??本次分享建立在博客Java爬蟲之下載IMDB中Top250電影的圖片上,總體的爬蟲思路沒有變化,只是在此基礎(chǔ)上引入多線程。多線程的思路如下:
Java的每個(gè)任務(wù)類必須實(shí)現(xiàn)Runnable接口,因此,我們將新建ImageDownload類來實(shí)現(xiàn)Runnable接口。ImageDownload類的構(gòu)造函數(shù)的參數(shù)有: url:網(wǎng)站的網(wǎng)址, dir: 圖片儲(chǔ)存目錄。并在run()方法中實(shí)現(xiàn)將網(wǎng)頁中的圖片下載到本地。
在主函數(shù)中,調(diào)用ImageDownload類,利用多線程實(shí)現(xiàn)爬蟲下載,提高運(yùn)行效率。
程序??ImageDownload類的代碼完整如下:
package wikiScrape; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import org.apache.commons.io.FileUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; /* ImageDownload類實(shí)現(xiàn)Runnable接口 * ImageDownload類的構(gòu)造參數(shù): url:網(wǎng)址的網(wǎng)址, dir: 圖片存儲(chǔ)目錄 * ImageDownload類實(shí)現(xiàn)了將網(wǎng)頁中的圖片下載到本地 */ public class ImageDownload implements Runnable{ private String url; private String dir; public ImageDownload(String url, String dir) { this.url = url; this.dir = dir; } // run()函數(shù): 將網(wǎng)頁中的電影圖片下載到本地 @Override public void run(){ // 利用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{ // 打開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??主函數(shù)ImageScraper.java的代碼如下:
package wikiScrape; /* 本爬蟲利用多線程爬取http://www.imdb.cn/IMDB250/中Top250的圖片 * 先利用Jsoup解析得到該網(wǎng)頁中的圖片的url * 然后利用FileUtils.copyURLToFile()函數(shù)將圖片下載到本地 */ import wikiScrape.ImageDownload; import java.util.ArrayList; import java.util.concurrent.*; import java.util.Date; public class ImageScraper { public static void main(String[] args) { Date d1 = new Date(); System.out.println("爬蟲開始......"); // 爬取的網(wǎng)址列表,一共十個(gè)網(wǎng)頁 ArrayList運(yùn)行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/"; // 圖片儲(chǔ)存目錄 // 利用多線程下載每個(gè)頁面中的圖片 ExecutorService executor = Executors.newCachedThreadPool(); // Create and launch 100 threads for(int i=0; i<10; i++) { executor.execute(new ImageDownload(urls.get(i), dir)); } executor.shutdown(); // wait until all tasks are finished while(!executor.isTerminated()) { } 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+"秒."); } } ??運(yùn)行上述主函數(shù),結(jié)果如下:
??一共也是下載了244張圖片,運(yùn)行結(jié)果與博客:Java爬蟲之下載IMDB中Top250電影的圖片中的結(jié)果一模一樣,但是時(shí)間卻少了一半!可見利用多線程來寫爬蟲效率相當(dāng)高!
??本次分享到此結(jié)束,歡迎大家交流~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68921.html
摘要:介紹在博客爬蟲爬取豆瓣電影圖片中我們利用的爬蟲框架,將豆瓣電影圖片下載到自己電腦上。那么,在的爬蟲的也可以下載圖片嗎答案當(dāng)然是肯定的在本次分享中,我們將利用的包和函數(shù)來實(shí)現(xiàn)圖片的下載。 介紹 ??在博客:Scrapy爬蟲(4)爬取豆瓣電影Top250圖片中我們利用Python的爬蟲框架Scrapy,將豆瓣電影Top250圖片下載到自己電腦上。那么,在Java的爬蟲的也可以下載圖片嗎?答...
摘要:本次爬蟲項(xiàng)目將會(huì)用到模塊中的類,多線程豆瓣電影圖片??偨Y(jié)通過上述兩個(gè)爬蟲程序的對(duì)比,我們不難發(fā)現(xiàn),同樣是下載豆瓣電影,個(gè)網(wǎng)頁中的圖片,在沒有使用多線程的情況下,總共耗時(shí)約,而在使用多線程個(gè)線程的情況下,總共耗時(shí)約秒,效率整整提高了約倍。 爬蟲項(xiàng)目介紹 ??本次爬蟲項(xiàng)目將爬取豆瓣Top250電影的圖片,其網(wǎng)址為:https://movie.douban.com/top250, 具體頁面如...
摘要:前篇全片都是生硬的理論使用,今天就放個(gè)靜態(tài)爬取的實(shí)例讓大家體驗(yàn)一下的使用,了解一些背后的原理。給出網(wǎng)站打開右鍵檢查第一個(gè)電影,分析源碼先,發(fā)現(xiàn)每個(gè)標(biāo)簽就對(duì)應(yīng)著一個(gè)電影的信息。 前篇全片都是生硬的理論使用,今天就放個(gè)靜態(tài)爬取的實(shí)例讓大家體驗(yàn)一下BeautifulSoup的使用,了解一些背后的原理。 順便在這引入靜態(tài)網(wǎng)頁的概念——靜態(tài)網(wǎng)頁是指一次性加載所有內(nèi)容的網(wǎng)頁,爬蟲一次請(qǐng)求便能得到所...
摘要:這次我們爬取的內(nèi)容準(zhǔn)備步驟找到格式網(wǎng)頁中需要爬取的數(shù)據(jù)的例如我們需要爬取圖片的這里用的是不會(huì)用的同學(xué)請(qǐng)百度然后我們開始建立工程打開然后在你想要建立工程的目錄下面輸入就會(huì)自動(dòng)建立一個(gè)工程然后去根目錄建立一個(gè)去這個(gè)目錄里建立一個(gè)注意這里的主爬蟲 這次我們爬取的內(nèi)容 showImg(https://segmentfault.com/img/bVSirX?w=1021&h=521); 準(zhǔn)備步驟...
摘要:前言新接觸爬蟲,經(jīng)過一段時(shí)間的實(shí)踐,寫了幾個(gè)簡單爬蟲,爬取豆瓣電影的爬蟲例子網(wǎng)上有很多,但都很簡單,大部分只介紹了請(qǐng)求頁面和解析部分,對(duì)于新手而言,我希望能夠有一個(gè)比較全面的實(shí)例。 0.前言 新接觸爬蟲,經(jīng)過一段時(shí)間的實(shí)踐,寫了幾個(gè)簡單爬蟲,爬取豆瓣電影的爬蟲例子網(wǎng)上有很多,但都很簡單,大部分只介紹了請(qǐng)求頁面和解析部分,對(duì)于新手而言,我希望能夠有一個(gè)比較全面的實(shí)例。所以找了很多實(shí)例和文...
閱讀 1141·2023-04-26 02:46
閱讀 637·2023-04-25 19:38
閱讀 654·2021-10-14 09:42
閱讀 1252·2021-09-08 09:36
閱讀 1368·2019-08-30 15:44
閱讀 1334·2019-08-29 17:23
閱讀 2252·2019-08-29 15:27
閱讀 818·2019-08-29 14:15