摘要:本次分享將在此基礎上,利用多線程,提高程序運行的效率。思路本次分享建立在博客爬蟲之下載中電影的圖片上,總體的爬蟲思路沒有變化,只是在此基礎上引入多線程。
介紹
??在博客:Java爬蟲之下載IMDB中Top250電影的圖片中我們實現(xiàn)了利用Java爬蟲來下載圖片,但是效率不算太高。本次分享將在此基礎上,利用多線程,提高程序運行的效率。
思路??本次分享建立在博客Java爬蟲之下載IMDB中Top250電影的圖片上,總體的爬蟲思路沒有變化,只是在此基礎上引入多線程。多線程的思路如下:
Java的每個任務類必須實現(xiàn)Runnable接口,因此,我們將新建ImageDownload類來實現(xiàn)Runnable接口。ImageDownload類的構造函數(shù)的參數(shù)有: url:網(wǎng)站的網(wǎng)址, dir: 圖片儲存目錄。并在run()方法中實現(xiàn)將網(wǎng)頁中的圖片下載到本地。
在主函數(shù)中,調(diào)用ImageDownload類,利用多線程實現(xià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類實現(xiàn)Runnable接口 * ImageDownload類的構造參數(shù): url:網(wǎng)址的網(wǎng)址, dir: 圖片存儲目錄 * ImageDownload類實現(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)址列表,一共十個網(wǎng)頁 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/"; // 圖片儲存目錄 // 利用多線程下載每個頁面中的圖片 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("程序運行完畢!"); Date d2 = new Date(); // 計算程序的運行時間,并輸出 long seconds = (d2.getTime()-d1.getTime())/1000; System.out.println("一共用時: "+seconds+"秒."); } } ??運行上述主函數(shù),結果如下:
??一共也是下載了244張圖片,運行結果與博客:Java爬蟲之下載IMDB中Top250電影的圖片中的結果一模一樣,但是時間卻少了一半!可見利用多線程來寫爬蟲效率相當高!
??本次分享到此結束,歡迎大家交流~~
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/68921.html
摘要:介紹在博客爬蟲爬取豆瓣電影圖片中我們利用的爬蟲框架,將豆瓣電影圖片下載到自己電腦上。那么,在的爬蟲的也可以下載圖片嗎答案當然是肯定的在本次分享中,我們將利用的包和函數(shù)來實現(xiàn)圖片的下載。 介紹 ??在博客:Scrapy爬蟲(4)爬取豆瓣電影Top250圖片中我們利用Python的爬蟲框架Scrapy,將豆瓣電影Top250圖片下載到自己電腦上。那么,在Java的爬蟲的也可以下載圖片嗎?答...
摘要:本次爬蟲項目將會用到模塊中的類,多線程豆瓣電影圖片。總結通過上述兩個爬蟲程序的對比,我們不難發(fā)現(xiàn),同樣是下載豆瓣電影,個網(wǎng)頁中的圖片,在沒有使用多線程的情況下,總共耗時約,而在使用多線程個線程的情況下,總共耗時約秒,效率整整提高了約倍。 爬蟲項目介紹 ??本次爬蟲項目將爬取豆瓣Top250電影的圖片,其網(wǎng)址為:https://movie.douban.com/top250, 具體頁面如...
摘要:前篇全片都是生硬的理論使用,今天就放個靜態(tài)爬取的實例讓大家體驗一下的使用,了解一些背后的原理。給出網(wǎng)站打開右鍵檢查第一個電影,分析源碼先,發(fā)現(xiàn)每個標簽就對應著一個電影的信息。 前篇全片都是生硬的理論使用,今天就放個靜態(tài)爬取的實例讓大家體驗一下BeautifulSoup的使用,了解一些背后的原理。 順便在這引入靜態(tài)網(wǎng)頁的概念——靜態(tài)網(wǎng)頁是指一次性加載所有內(nèi)容的網(wǎng)頁,爬蟲一次請求便能得到所...
摘要:這次我們爬取的內(nèi)容準備步驟找到格式網(wǎng)頁中需要爬取的數(shù)據(jù)的例如我們需要爬取圖片的這里用的是不會用的同學請百度然后我們開始建立工程打開然后在你想要建立工程的目錄下面輸入就會自動建立一個工程然后去根目錄建立一個去這個目錄里建立一個注意這里的主爬蟲 這次我們爬取的內(nèi)容 showImg(https://segmentfault.com/img/bVSirX?w=1021&h=521); 準備步驟...
摘要:前言新接觸爬蟲,經(jīng)過一段時間的實踐,寫了幾個簡單爬蟲,爬取豆瓣電影的爬蟲例子網(wǎng)上有很多,但都很簡單,大部分只介紹了請求頁面和解析部分,對于新手而言,我希望能夠有一個比較全面的實例。 0.前言 新接觸爬蟲,經(jīng)過一段時間的實踐,寫了幾個簡單爬蟲,爬取豆瓣電影的爬蟲例子網(wǎng)上有很多,但都很簡單,大部分只介紹了請求頁面和解析部分,對于新手而言,我希望能夠有一個比較全面的實例。所以找了很多實例和文...
閱讀 1244·2023-04-26 02:46
閱讀 697·2023-04-25 19:38
閱讀 705·2021-10-14 09:42
閱讀 1311·2021-09-08 09:36
閱讀 1423·2019-08-30 15:44
閱讀 1382·2019-08-29 17:23
閱讀 2304·2019-08-29 15:27
閱讀 864·2019-08-29 14:15