jsoup下载地址 http://www.jsoup.org

httpclient下载地址 http://hc.apache.org/downloads.cgi

其他jar包见附件

Crawler

package jsoup;  

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.HttpStatus;
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 下载程序
*/
public abstract class Crawler { /**
* 使用google 翻译api
*
* @param en
* @return
*/
public String translateEnToCinese(String en) {
Translate.setHttpReferrer("http://www.xxx.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)); InputStream input = null;
FileOutputStream output = null;
try {
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
input = entity.getContent();
File file = new File(dir);
output = FileUtils.openOutputStream(file);
IOUtils.copy(input, output);
} catch (Exception e){
e.printStackTrace();
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
} /**
* 处理GET请求,返回整个页面
*
* @param url
* 访问地址
* @param params
* 编码参数
* @return
* @throws Exception
*/
public synchronized String doGet(String url, String... params)
throws Exception {
DefaultHttpClient httpClient = new DefaultHttpClient(); // 创建httpClient实例
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(); // 创建get方法实例
String content = "";
httpGet.setURI(new java.net.URI(url));
try {
HttpResponse response = httpClient.execute(httpGet); // 执行请求,得到response对象
int resStatu = response.getStatusLine().getStatusCode(); // 得到返回的状态码
if (resStatu == HttpStatus.SC_OK) { // 200正常
HttpEntity entity = response.getEntity(); // 获得相应的实体
if (entity != null) {
// 使用EntityUtils的toString方法,传递默认编码,在EntityUtils中的默认编码是ISO-8859-1
content = EntityUtils.toString(entity, charset);
}
}
} catch (Exception e) {
System.out.println("访问【" + url + "】出现异常!");
e.printStackTrace();
} finally {
// 关闭资源
httpGet.abort();
httpClient.getConnectionManager().shutdown();
}
return content;
}
}

GoogleLogoCrawler

package jsoup;  

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 下载程序
*/
public class GoogleLogoCrawler extends Crawler { private static final String URL = "http://www.logocollect.com/google/year.php?key=%y&page=%p"; private static final String LOGO_URL = "http://www.logocollect.com/google/"; private static final String[] YEARS = new String[] {
//"1998", "1999", "2000",
//"2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008",
"2009", "2010", "2011", "2012" }; private static final String INDEX = "http://www.logocollect.com/google/year.php?key=%y"; private static final String DIR_PATH = "D:\\googlelogos\\"; public void doStart() {
JSONArray array = new JSONArray();
for (String year : YEARS) {
String ind = INDEX.replaceAll("%y", year);
int pageCount = getPageCount(ind);
for (int i = 1; i < pageCount+1; i++) {
String url = URL.replaceAll("%y", year).replaceAll("%p", i + "");
String path = year + "_" + i;
start(url, array, DIR_PATH + path + "\\", path);
}
}
try {
FileUtils.writeStringToFile(new File(DIR_PATH + "json"), array.toString(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(array);
} public int getPageCount(String url) {
int pageCount = 1;
try {
org.jsoup.nodes.Document doc = Jsoup.connect(url).get(); String els = doc.html().toString();
int start = els.indexOf("总页数") + 4;
String temp = els.substring(start);
int end = temp.indexOf(",");
pageCount = Integer.parseInt(els.substring(start,start+end));
System.out.println(pageCount);
} catch (IOException e) {
e.printStackTrace();
}
return pageCount;
} public void start(String url, JSONArray array, String dir, String path) {
try {
String content = super.doGet(url);
Document doc = Jsoup.parse(content);
Elements dds = doc.select(".img img");
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(0);
for (int i = 0; i < dds.size(); i++) {
Element img = dds.get(i);
String src = img.select("img").first().attr("src");
String title = img.select("img").first().attr("title");
Map<String, Object> map = super.getMap(); map.put("url", LOGO_URL + src);
map.put("title", title); list.add(map);
}
JSONArray tempJsonArray = new JSONArray();
for (Map<String, Object> map : list) {
JSONObject jsonObject = new JSONObject();
String proxy = StringUtils.substringAfterLast(map.get("url")
.toString(), ".");
long date = new Date().getTime();
String name = date + "." + proxy;
jsonObject.put("url", map.get("url").toString());
jsonObject.put("dir", name);
jsonObject.put("title", map.get("title").toString()); // 翻译
// 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);
tempJsonArray.put(jsonObject);
}
array.put(new JSONObject().put(path, tempJsonArray));
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) throws Exception {
new GoogleLogoCrawler().doStart();
} }

本文转自:http://you-java.iteye.com/blog/1460271

jsoup httpclient 爬取网页并下载google图标的更多相关文章

  1. python 爬虫(爬取网页的img并下载)

    from urllib.request import urlopen # 引用第三方库 import requests #引用requests/用于访问网站(没安装需要安装) from pyquery ...

  2. HttpClient(一)HttpClient抓取网页基本信息

    一.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包, 并且它支 ...

  3. Java两种方式简单实现:爬取网页并且保存

    注:如果代码中有冗余,错误或者不规范,欢迎指正. Java简单实现:爬取网页并且保存 对于网络,我一直处于好奇的态度.以前一直想着写个爬虫,但是一拖再拖,懒得实现,感觉这是一个很麻烦的事情,出现个小错 ...

  4. python3爬虫爬取网页思路及常见问题(原创)

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

  5. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  6. PHP利用Curl实现多线程抓取网页和下载文件

    PHP 利用 Curl  可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery ...

  7. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  8. 常用正则表达式爬取网页信息及HTML分析总结

    Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取<tr></tr>标签之间内容 2.获取<a href..></a>超链接之间内容 3 ...

  9. node:爬虫爬取网页图片

    代码地址如下:http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片 ...

随机推荐

  1. 【Hibernate】Hibernate系列7之二级缓存

    二级缓存 7.1.概述 7.2.配置方法

  2. MVC ViewBag和ViewData的区别

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

  3. location 、history

    location.href= location.reload() history.go()  0   1  -1 history.back() history.forward() history.le ...

  4. js 函数声明方式以及javascript的历史

    1.function  xx(){} 2.匿名方式   window.onload=function(){dslfjdslfkjdslf}; 3.动态方式  var demo=new Function ...

  5. mysql中int、bigint、smallint 和 tinyint的区别与长度的含义

    最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint.其中比较迷惑的是int和smallint的差别.今天就在网上仔细找了找,找到如下内容, ...

  6. codeforces 472C.Make It Nondeterministic 解题报告

    题目链接:http://codeforces.com/problemset/problem/472/C 题目意思:给出 n 个 people(从第1行往下数,编号依次为1,2,...,n),每 个 p ...

  7. Java的switch用法

    下面是switch的用法: var status = msg;        switch (status)    //status是表达式        {            case 0:st ...

  8. intellij 提交代码到git

    .配置git .create git repository .git-->add commit Directory .提交代码 git remote add origin https://git ...

  9. 解决 internet connection sharing 启动不了

    1.确认Windows Firewall服务是否启动(有异常可参考下面) a.打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ...

  10. mysql-关于Unix时间戳(unix_timestamp)

    unix_timestamp时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)以来的秒数.它也被称为 Unix 时间戳(Unix Timestamp). Unix时间戳(Unix t ...