1. 程式人生 > >一個更加簡單粗暴的爬蟲-必應今日美圖

一個更加簡單粗暴的爬蟲-必應今日美圖

ble ont 三級 led 觀察 unit form 簡單的 client

今天上午看到一篇文章:一個簡單粗暴的爬蟲 - 必應今日美圖。我也用自己的方式更加簡單的實現了這個功能。下面我就貼一下自己的代碼和思路。

我就不分析原博的思路了,原博寫的很清楚。我用的是htmlunit,從原博的第三步開始,觀察三級地址的規律,從http://bing.plmeizi.com/show/1-490開始爬取的。頁面比較少,圖片也不多,沒用多線程。

 1 import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
 2 import com.gargoylesoftware.htmlunit.WebClient;
3 import com.gargoylesoftware.htmlunit.html.HtmlAnchor; 4 import com.gargoylesoftware.htmlunit.html.HtmlPage; 5 import org.apache.commons.io.FileUtils; 6 7 import java.io.File; 8 import java.io.IOException; 9 import java.io.InputStream; 10 import java.net.MalformedURLException; 11 12 /** 13 * <pre>
14 * class intro 15 * </pre> 16 * <p> 17 * Created by fujun on 2017/9/29. 18 */ 19 public class BingPhoto { 20 public static void main(String[] args) { 21 WebClient webClient = new WebClient(); 22 webClient.getOptions().setCssEnabled(false); 23 webClient.getOptions().setJavaScriptEnabled(false
); 24 for (int i = 1; i < 491; i++) { 25 String url = "http://bing.plmeizi.com/show/" + i; 26 try { 27 HtmlPage page = webClient.getPage(url); 28 HtmlAnchor a = (HtmlAnchor) page.getElementById("picurl"); 29 String picUrl = a.getHrefAttribute(); 30 if (picUrl.contains("jpg")) { 31 InputStream inputStream = webClient.getPage(picUrl).getWebResponse().getContentAsStream(); 32 FileUtils.copyToFile(inputStream, new File("E://bingpic//" + i + ".jpg")); 33 System.out.println("SUCCEED:" + url); 34 } else { 35 System.out.println("FAILED:" + url); 36 } 37 38 } catch (FailingHttpStatusCodeException e) { 39 // TODO Auto-generated catch block 40 e.printStackTrace(); 41 } catch (MalformedURLException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 } catch (IOException e) { 45 // TODO Auto-generated catch block 46 e.printStackTrace(); 47 } finally { 48 webClient.close(); // 關閉客戶端,釋放內存 49 } 50 } 51 } 52 }

註意點:

有些頁面是404的,例如:http://bing.plmeizi.com/show/44

還有些頁面能打開但是加載不了圖片,例如:http://bing.plmeizi.com/show/1

這490個頁面,最後抓取到409張圖片。原博只抓取到347張圖片,好幾個類,還用到多線程。我代碼只有短短50行,更加簡單粗暴!!!

技術分享

一個更加簡單粗暴的爬蟲-必應今日美圖