`
dh189
  • 浏览: 135308 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

使用HttpClient4 和jsoup下载Google 1998年到2010年的logo(原创)

    博客分类:
  • java
阅读更多
我个人比较喜欢Google的logo,感觉设计的很好,以前都是看到喜欢的logo就下载下来(通过浏览器右键图片另存为),最近看了java的jsoup(html解析器)突发奇想能不能把Google的logo全拿下来,通过分析Google的页面发现并不复杂,所以就决定把它拿下来了,在Google logos页面发现都是英文的,就想到了再利用Google翻译api对logo说明进行翻译下,最终把图片信息以及翻译结果用json保存下来,
最终将这些logo放到了我的导航189站点上供喜欢Google logo的网友欣赏,哈哈。
地址:
http://www.dh189.com/p/logos/google/10_3.html

具体代码实现如下:
Crawler.java
package com.googlelogo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.util.EntityUtils;

import com.google.api.translate.Language;
import com.google.api.translate.Translate;

/**
 * google logo 下载程序
 * 
 * http://www.dh189.com/
 * @author ZZJ
 *
 */
public abstract class Crawler {

    /**
     * 使用google 翻译api
     * @param en
     * @return
     */
    public String translateEnToCinese(String en) {
        Translate.setHttpReferrer("http://www.dh189.com");
        try {
            return Translate.execute(en, Language.ENGLISH, Language.CHINESE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 获取一个Map
     * 
     * @return
     */
    public Map<String, Object> getMap() {
        return new HashMap<String, Object>(0);
    }

    /**
     * 下载文件
     * 
     * @param url 文件http地址
     * @param dir 目标文件
     * @throws IOException
     */
    public void downloadFile(String url, String dir) throws Exception {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        HttpProtocolParams.setUserAgent(httpclient.getParams(),
                "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9");
        HttpGet httpget = new HttpGet();
        httpget.setURI(new java.net.URI(url));
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        InputStream input = null;
        try {
            input = entity.getContent();
            File file = new File(dir);
            FileOutputStream output = FileUtils.openOutputStream(file);
            try {
                IOUtils.copy(input, output);
            } finally {
                IOUtils.closeQuietly(output);
            }
        } finally {
            IOUtils.closeQuietly(input);
        }
    }

    /**
     * 处理GET请求,返回整个页面
     * 
     * @param url 访问地址
     * @param params 编码参数
     * @return
     * @throws Exception
     * @throws Exception
     */
    public synchronized String doGet(String url, String... params) throws Exception {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        HttpProtocolParams.setUserAgent(httpclient.getParams(),
                "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9");
        String charset = "UTF-8";
        if (null != params && params.length >= 1) {
            charset = params[0];
        }
        HttpGet httpget = new HttpGet();
        String content = "";
        httpget.setURI(new java.net.URI(url));
        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            // 使用EntityUtils的toString方法,传递默认编码,在EntityUtils中的默认编码是ISO-8859-1
            content = EntityUtils.toString(entity, charset);
        }
        httpget.abort();
        httpclient.getConnectionManager().shutdown();
        return content;
    }
}


GoogleLogoCrawler.java
package com.googlelogo;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * google logo 下载程序
 * 
 * http://www.dh189.com/
 * @author ZZJ
 *
 */
public class GoogleLogoCrawler extends Crawler {

    private static final String URL = "http://www.google.com.hk/logos/logos%y-%n.html";

    private static final String LOGO_URL = "http://www.google.com.hk";

    private static final String[] YEARS = new String[] { "98", "99", "00", "01", "02", "03", "04", "05",
            "06", "07", "08", "09", "10" };

    private static final String INDEX = "http://www.google.com.hk/logos/index.html";
    
    private static final String DIR_PATH="D:\\googlelogos\\";

    public void doStart() {
        JSONArray array = new JSONArray();
        for (String year : YEARS) {
            for (int i = 1; i < 5; i++) {
                String url = URL.replaceAll("%y", year).replaceAll("%n", i + "");
                String path = year + "_" + i;
                start(url, array, DIR_PATH + path + "\\", path);
            }
        }
        start(INDEX, array, DIR_PATH+"10_3\\", "10_3");
        try {
            FileUtils.writeStringToFile(new File(DIR_PATH+"json"), array.toString(), "UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(array);
    }

    public void start(String url, JSONArray array, String dir, String path) {
        try {
            String content = super.doGet(url);
            Document doc = Jsoup.parse(content);
            Elements dts = doc.select(".doodles dt");
            Elements dds = doc.select(".doodles dd");
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(0);
            for (int i = 0; i < dts.size(); i++) {
                Element dt = dts.get(i);
                Element dd = dds.get(i);
                Map<String, Object> map = super.getMap();
                list.add(map);
                map.put("date", dt.text());
                map.put("url", LOGO_URL + dd.select("img").first().attr("src"));
                map.put("title", dd.text());
            }
            JSONArray array2 = new JSONArray();
            for (Map<String, Object> map : list) {
                JSONObject json = new JSONObject();
                String proxy = StringUtils.substringAfterLast(map.get("url").toString(), ".");
                long date = new Date().getTime();
                String name = date + "." + proxy;
                json.put("url", map.get("url").toString());
                json.put("dir", name);
                json.put("title_en", map.get("title"));
                json.put("date", map.get("date"));
                //翻译
                String dateZh = super.translateEnToCinese(map.get("date").toString());
                String titleZh = super.translateEnToCinese(map.get("title").toString());
                json.put("title_zh_cn", dateZh + " - " + titleZh);
                //下载图片
                super.downloadFile(map.get("url").toString(), dir + name);
                array2.put(json);
            }
            array.put(new JSONObject().put(path, array2));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        new GoogleLogoCrawler().doStart();
    }

}


下载下的文件如下:



最终保存的json数据:




在导航189上的显示(2010年)


  • 大小: 133.7 KB
  • 大小: 63.6 KB
  • 大小: 1.1 MB
分享到:
评论
2 楼 liuyf 2010-08-26  
谢谢谢谢谢谢
1 楼 思念的风 2010-08-25  
谢了,根据你的网址我也简单的爬了些Google的logo图片

相关推荐

    使用HttpClient 和 jsoup 下载 Google logo

    Google的logo,感觉设计的很好,最近看了java的jsoup(html 解析器)把Google的logo全部下载下来,另外,在Google logos页面发现都是英文的,通过利用Google翻译api对logo说明进行翻译,最终把图片信息以及翻译结果...

    httpClient+jsoup 抓取网页数据

    4. **结合HttpClient和Jsoup抓取网页数据**: - 使用HttpClient发送HTTP请求,获取网页的HTML内容。 - 将HttpClient获取的HTML内容传递给Jsoup的parse方法,得到Document对象。 - 利用Jsoup的CSS选择器和数据提取...

    Java爬虫【一篇文章精通系列-案例开发-巨细】HttpClient5 + jsoup + WebMagic + spider

    本篇文章以"一篇文章精通系列-案例开发-巨细"为主题,详细介绍了如何使用HttpClient5、jsoup、WebMagic以及spider-flow这四个关键工具来构建一个强大的Java爬虫系统。以下是对这些工具和技术的深入解析。 首先,...

    httpClient4.5.3+Jsoup1.10.2

    httpClient4.5.3+Jsoup1.10.2 commons-codec-1.9.jar commons-logging-1.2.jar httpclient-4.5.3.jar httpcore-4.4.6.jar jsoup-1.10.2.jar

    httpClient采集jsoup解析

    HttpClient和Jsoup是Java开发中常用的两个库,用于网络数据采集和HTML解析。HttpClient提供了强大的HTTP客户端服务,而Jsoup则是一个优秀的库,用于处理和理解HTML文档结构。本篇文章将深入探讨这两个库的使用方法...

    HttpClient和jsoup架包

    HttpClient和Jsoup是Java开发中常用的两个库,用于处理HTTP请求和解析HTML文档。HttpClient是一个由Apache基金会开发的开源库,提供了丰富的API用于发送HTTP请求并处理响应,而Jsoup则是一个强大的HTML解析器,可以...

    基于SSM+maven+httpClient+jsoup实现小说网站项目.zip

    基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+...

    基于SSM+maven+httpClient+jsoup实现小说网站项目源码.zip

    1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,...

    爬虫:httpclient+jsoup

    本文将详细探讨使用Java中的两种库——HttpClient和Jsoup,以及它们结合使用来构建网页爬虫的方法。 HttpClient是Apache软件基金会的一个项目,提供了对HTTP协议的全面支持,包括请求/响应模型、连接管理、重定向...

    jsoup httpclient 爬取网页并下载google图标

    标题中的“jsoup httpclient 爬取网页并下载google图标”揭示了这个项目或教程是关于使用Java的两个著名库——Jsoup和HttpClient,来实现网页抓取并下载特定资源,这里是Google的图标。Jsoup是一个用于处理实际世界...

    jsoup+httpclient+jar包

    **JSoup库** ...通过JSoup和HTTPClient的结合使用,开发者可以轻松构建功能丰富的网页爬虫,满足数据抓取和分析的需求。在实际应用中,需要注意遵守网络规范,尊重网站规则,以及有效地管理和优化爬虫性能。

    最新httpClient+Jsoup jar包及其依赖包

    包含httpclient-4.5.3.jar,以及其依赖包commons-codec-1.9.jar,commons-logging-1.2.jar,httpcore-4.4.6.jar。包含jsoup-1.10.2.jar

    httpClient和jsoup整合,支持 HTTP 协议的客户端编程工具包

    获取到响应后,我们使用Jsoup的`parse`方法解析HTTP响应的实体内容,得到一个Document对象,然后可以利用Jsoup提供的API来提取网页的元素和数据。 WebSiteDomainUniqueGetDetails.java可能是另一个示例,它可能展示...

    httpClient+jsoup抓取网页数据实例和jar包

    在"httpclien+jsoup"压缩包中,应包含HttpClient和Jsoup的JAR文件,这些文件需要添加到项目的类路径中以便编译和运行上述示例代码。在使用这些库时,确保它们的版本兼容,避免出现潜在的运行时问题。 总的来说,...

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient 模拟登陆和抓取

    Jsoup+httpclient 模拟...通过上述知识点,可以了解到使用Jsoup和HttpClient进行网页登录和内容抓取的完整流程和关键技术点。在实际开发中,这些知识点可以帮助开发者高效地处理HTML页面数据,实现对网页的自动化操作。

    HttpClient Jsoup爬取天气预报

    HttpClient是Apache基金会开发的一款强大的HTTP...总的来说,HttpClient和Jsoup的结合使用,为Java开发者提供了一个强大且灵活的工具,可以方便地获取和解析网页数据,对于进行数据抓取和分析的项目来说非常实用。

    java爬虫需要的jsoup包和httpclient包.rar

    Java爬虫技术是软件开发中...通过学习和熟练使用Jsoup和HttpClient,你可以构建出能够处理各种网页结构,高效、稳定地抓取网络数据的爬虫程序。如果你对此感兴趣,记得点赞支持,这些资源将对你和你的同行们大有裨益。

Global site tag (gtag.js) - Google Analytics