一个更加简单粗暴的爬虫-必应今日美图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个更加简单粗暴的爬虫-必应今日美图相关的知识,希望对你有一定的参考价值。

今天上午看到一篇文章:一个简单粗暴的爬虫 - 必应今日美图。我也用自己的方式更加简单的实现了这个功能。下面我就贴一下自己的代码和思路。

我就不分析原博的思路了,原博写的很清楚。我用的是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行,更加简单粗暴!!!

技术分享

 

以上是关于一个更加简单粗暴的爬虫-必应今日美图的主要内容,如果未能解决你的问题,请参考以下文章

Python3网络爬虫开发实战 分析Ajax爬取今日头条街拍美图

爬虫:分析Ajax请求抓取今日头条街拍美图

如何获取 bing 每日壁纸(超高清版)

Python的几个爬虫代码整理(网易云微信淘宝今日头条)

简单粗暴爬取拉钩信息,

凌晨一点肝文1920×1080高清必应壁纸爬取,只为爬虫小白们入门!!!