`
nkliuliu
  • 浏览: 210401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

抓取google的相关搜索词

阅读更多

        最好配合上一篇的代理ip程序一起运行,否则根据我的经验抓不了几词就被google屏蔽了。废话不说代码如下:

package com.emar.spider;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.emar.core.httpClient.HttpclientUtil;

public class Spider {
	private static Set<String> keywords = new HashSet<String>();
	private String url = "http://www.google.com.hk/search";
	private int count = 0;

	/**
	 * @param args
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws InterruptedException {
		Spider s = new Spider();
		keywords.add("美女");
		Set<String> seeds = new HashSet<String>();
		for (String word : keywords) {
			seeds.add(word);
		}
		Set<String> result = s.getKRByseedWord(seeds, new HashSet<String>(),
				1000 * 60 * 1);
		System.out.println("本次抓却完毕---------------------------------");
		for (String word : result) {
			System.out.println(word);
		}
	}

	private Set<String> getKRByseedWord(Set<String> seeds, Set<String> result,
			int time) throws InterruptedException {
		if (keywords.size() >= 1000 || seeds.size() == 0) {
			return keywords;
		} else {
			for (String seed : seeds) {
				Map<String, String> params = new HashMap<String, String>();
				params.put("aq", "f");
				params.put("aqi", "");
				params.put("aql", "");
				params.put("btnG", "Google 搜索");
				params.put("client", "firefox-a");
				params.put("hl", "zh-CN");
				params.put("hs", "QDL");
				params.put("oq", "");
				params.put("q", seed);
				params.put("rls", "org.mozilla:zh-CN:official");
				params.put("safe", "strict");
				System.out.println("");
				System.out.println("++++++++++++++++++++++++++");
				System.out.println("第" + (++count) + "次抓取");
				String html = "";
				boolean flag = true;
				while (flag) {
					try {
						System.out.println("等待时长:" + time / 1000 + "秒");
						Thread.sleep(time);
						html = HttpclientUtil.getByProxy(url, params, "UTF-8");
						flag = false;
					} catch (Exception e) {
						// time = time + 10 * 1000;
						e.printStackTrace();
					}
				}
				System.out.println("");
				Document doc = Jsoup.parse(html);
				Elements links = doc.select(".brs_col a[href]");
				for (Element e : links) {
					keywords.add(e.text());
					result.add(e.text());
				}
				System.out.println("词库数量已经到达:" + keywords.size() + "个!");
				for (String k : keywords) {
					System.out.println(k);
				}
			}
			return getKRByseedWord(result, new HashSet<String>(), time);
		}

	}
}

 以下是部分抓取结果:

		帮巫婆变美女
		世界美女.秀
		泡美女
		真人美女类小游戏
		美女模特谭静
		小美女照片
		我的美女大小姐起点
		美女大学
		双人电眼美女小游戏
		美女模特大赛
		脱衣小游
		古典美女
		nba明星照片
		美女类小游戏大全
		非主流美女壁纸
		非主流美女头像图片
		美女游戏网
		非主流美女闪图图片
		中国真人美女小游戏
		非主流美女闪动照片
		90后非主流美女
		明星照片
		非主流美女闪动大图片
		美女小游戏4399
		秀舞吧
		秀舞
		网络美女小鱼
		真人美女小游戏
		古典美女flash
		泡泡美女176220
		美女猜拳脱衣小游戏
		世界十大美女照片
		模特写真
		非主流空间留言代码
		折磨美女类小游戏
		电眼美女游戏
		政要美女保镖
		世界美女城市
		美女小游戏试玩
		美女导师爱上我找小说
		非主流美女163相册
		非主流美女发型
		电眼美女2小游戏
		非主流美女qq头像闪图
		巫婆变美女
		在线真人美女小游戏
		泡美女小游戏
		非主流美女相册
		电眼美女小游戏大全
		非主流空间闪图
		明星大美女
		搜索巫婆变美女
		美女博客
		网络美女排行
		qq空间非主流美女头像
		脱衣类小游戏
		玩美女类小游戏
		网络美女照
		小说我的同居女神
		电眼美女3小游戏
		极品家丁
		小说老婆爱上我
		非主流美女
		非主流帅哥照片
		非主流闪动图片
		美女明星大图
		十大美女明星
		最新非主流美女图片
		泡泡美女小游戏
		美女脱衣类小游戏
		我的美女大小姐全集
		美女游戏
		中国第一美女
		整美女类小游戏
		流氓老师
		搜索真人美女小游戏
		非主流美女生活照片
		中国女明星照片
		美女导师爱上我下载
		美女
		美女脱衣小游戏
		电眼美女小游戏
		美女小游戏
		韩国可爱美女
		小说我的美女大小姐下载
		非主流美女闪图照片
		打扮美女小游戏
		最新非主流美女闪图
		电眼美女小游戏下载
		我的美女大小姐全下载
		非主流图片大图
		秀舞访
		世界美女排行榜
		qq秀舞
		韩国网络美女
		小说我的美女大小姐
		非主流美女闪动头像
		美女导师爱上我小说
		08美女车展
		魔兽世界美女
		怎么泡美女
		韩国美女明星大图
		最美女明星
		非主流闪图
		古装美女照片
		4399美女类小游戏
		可爱美女qq表情
		非主流美女闪图模块
		我的美女大小姐chm
		美女脱衣麻将2
		美女导师爱上我找
		真人秀舞
		我的美女大小姐全文
		男明星照片
		美女导师爱上我手机
		网络美女排行榜
		老婆爱上我sodu
		我的美女老总
		非主流美女闪图
		古典美女圖
		我的同居女神下载
		美女明星的相册
		无财无貌怎么泡美女
		我的美女大小姐txt
		我的美女大小姐电子书
		无才无貌如何泡美女
		巫婆变美女中文版
		非主流美女大图
		美女秀舞
		美女小游戏网站
		帅哥明星照片
		我的美女大小姐全集txt下载
		古典美女相片
		网上泡美女
		非主流头像
		我的美女大小姐全文txt
		时尚非主流美女图片
		古典美女图
		非主流美女闪头像
		老婆爱上我最新更新
		世界美女排名
		非主流空间模块
		可爱美女头像
		美女小游戏网
		美女游戏下载
		美女导师爱上我
		网络美女照片
		秀舞网
		非主流美女闪动头象
		我的同居女神全本下载
		韩国女明星照片
		重庆美女模特
		我的老婆爱上我
		非主流美女闪动图片
		美女导师爱上你
		我的美女大小姐全集下载
		古代电眼美女小游戏
		美女脱衣游戏
		世界美女是谁
		美女导师爱上我最新
		非主流美女闪动qq头像
		巫婆变美女攻略
		美女导师爱上我最新章节
		美女小游戏试
		非主流美女闪动模块
		美女导师爱上我小说网
		美女照片
		我的美女大小姐全集txt
		老婆爱上我最新
		我的美女大小姐下载
		美女游戏大全
		古装美女小游戏
		北京车展第一美女模特
		电眼小美女小游戏
		美女车展
		我的美女大小姐txt下载
		巫婆变美女小游戏
		真人版美女游戏
		qq非主流美女闪图
		老婆爱上我
		我的美女大小姐作者
		美女明星大曝光
		qq空间非主流图片
		qq非主流美女闪头像
		折磨美女游戏
		美女导师爱上我吧
		搜索非主流美女图片
		人造美女游戏
		巫婆造美女小游戏
		美女照片欣赏
		我的同居女神最新
		秀舞网站
		非主流美女头像
		真人美女小游戏下载
		美女模特
		我的美女大小姐全文下载
		我的美女大小姐最新章节
		非主流美女相册地址
		非主流帅哥图片
		搜索电眼美女小游戏
		真人美女小游戏在线玩
		美女模特网
		所有美女类小游戏
		如何泡美女
		美女交友
		世界美女照片
		更多美女脱衣
		重庆美女模特回归自然
		美女导师爱上我79
		韩国男明星照片
		电眼美女1小游戏
		可爱美女照片
		世界美女榜
		pcpop泡泡美女
		美女模特秀
		美女大图
		非主流空间
		非主流美女闪动
		真人美女游戏
		qq空间非主流美女图片
		网络美女壁纸
		老巫婆变美女
		韩国明星照片
		美女导师爱上
		我的同居女神-txt下载
		电眼少美女小游戏
		老婆爱上我下载
		中国美女照片
		非主流美女闪图代码
		老婆爱上我最新章节
		非主流美女闪图头像
		明星八卦
		人造美女小游戏
		非主流空间日志
		我的同居女神最新章节
		可爱美女
		在线美女游戏
		巫婆变美女游戏
		4399小游戏
		非主流qq头像
		非主流图片集闪图
		我的美女大小姐最新
		邻家有女初长成
		美女时尚
		美女小游戏免费试玩
		非主流空间留言
		网络美女
		我的同居女神txt
		美女照片集
		古典美女头像
		找个美女做老婆最新
		非主流空间皮肤
		ps古典美女
		怎样泡美女
		最新非主流美女照片
		非主流可爱美女照片
		非主流美女图片集闪图
		我的美女大小姐最新下载
		3d真人美女小游戏
		世界美女排行
		非主流美女照片集
		泡泡美女
		我的超级情人
		qq非主流美女图片
		我的美女大小姐最新章
		非主流美女闪动大图
		单机美女脱衣麻将
		非主流空间代码
		非主流美女图片代码
		美女类小游戏
		非主流美女照片制作
		非主流图片闪图
		非主流图片
		非主流美女照片
		qq非主流图片
		世界美女大赛
		搜索美女小游戏
		qq空间非主流美女闪图
		重庆美女照片
		我的同居女神
		在线美女小游戏试玩
		2008网络美女
		我的美女导师爱上我
		qq非主流美女照片
		非主流可爱美女qq头像
		折麽美女小游戏
		秀舞娱乐会所
		古典美女照片
		非主流空间图片
		新疆美女模特
		混血美女
		明星照片集
		非主流图片库
		非主流美女闪动横幅
		非主流美女图片
		老婆爱上我520
		非主流图片制作
		非主流美女qq头像
		在线美女脱衣麻将
		真人美女小游戏网
		古典美女模块
		我的美女大小姐
		非主流空间皮肤代码
 

 

分享到:
评论
10 楼 hwx521 2011-03-19  
请问下 lz,
import com.emar.core.util.PropertiesUtil; 
NetServiceException
这个是在那个jar里面! 还有上面那个类也提供下啊
9 楼 glamey 2011-03-18  
nkliuliu 写道
lym6520 写道
Google 做了很多抓取的屏蔽操作,试了下JE的,虽然JE也做了抓取屏蔽,不过很容易跳过JE的过滤,只要设置User-Agent属性就行了。

没有用,已经设置过了。在
HttpclientUtil.getByProxy(url, params, "UTF-8");  
里的实现方法里设置过。


其实是可以设置的,httpclient默认的UserAgent是JAVA.所以大家可以设置成浏览器客户端就没问题了。
8 楼 nkliuliu 2011-03-18  
mazhiyuan 写道
lz把HttpClient那个类也贴出来啊

应要求把工具类也发上了,至于jar包,就不发了。
package com.emar.core.httpClient;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

import javax.net.ssl.SSLHandshakeException;

import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.NoHttpResponseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;

import com.emar.core.util.PropertiesUtil;

/**
 * 默认编码UTF-8
 * 
 * @author BigWolf
 * 
 */
public class HttpclientUtil {
	private static final String CHARSET_UTF8 = "UTF-8";
	private static final String CHARSET_GBK = "GBK";
	private static final String SSL_DEFAULT_SCHEME = "https";
	private static final int SSL_DEFAULT_PORT = 443;
	private static final int connectionTimeoutMillis = 30000;
	private static final int socketTimeoutMillis = 30000;
	// 异常自动恢复处理, 使用HttpRequestRetryHandler接口实现请求的异常恢复
	private static HttpRequestRetryHandler requestRetryHandler = new HttpRequestRetryHandler() {
		// 自定义的恢复策略
		public boolean retryRequest(IOException exception, int executionCount,
				HttpContext context) {
			// 设置恢复策略,在发生异常时候将自动重试3次
			if (executionCount >= 3) {
				// Do not retry if over max retry count
				return false;
			}
			if (exception instanceof NoHttpResponseException) {
				// Retry if the server dropped connection on us
				return true;
			}
			if (exception instanceof SSLHandshakeException) {
				// Do not retry on SSL handshake exception
				return false;
			}
			HttpRequest request = (HttpRequest) context
					.getAttribute(ExecutionContext.HTTP_REQUEST);
			boolean idempotent = (request instanceof HttpEntityEnclosingRequest);
			if (!idempotent) {
				// Retry if the request is considered idempotent
				return true;
			}
			return false;
		}
	};
	// 使用ResponseHandler接口处理响应,HttpClient使用ResponseHandler会自动管理连接的释放,解决了对连接的释放管理
	private static ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
		// 自定义响应处理
		public String handleResponse(HttpResponse response)
				throws ClientProtocolException, IOException {
			HttpEntity entity = response.getEntity();
			if (entity != null) {
				String charset = EntityUtils.getContentCharSet(entity) == null ? CHARSET_UTF8
						: EntityUtils.getContentCharSet(entity);
				return new String(EntityUtils.toByteArray(entity), charset);
			} else {
				return null;
			}
		}
	};

	/**
	 * Get方式提交,URL中包含查询参数, 格式:http://www.g.cn?search=p&name=s.....
	 * 
	 * @param url
	 *            提交地址
	 * @return 响应消息
	 */
	public static String get(String url) {
		return get(url, null, null);
	}

	/**
	 * Get方式提交,URL中不包含查询参数, 格式:http://www.g.cn
	 * 
	 * @param url
	 *            提交地址
	 * @param params
	 *            查询参数集, 键/值对
	 * @return 响应消息
	 */
	public static String get(String url, Map<String, String> params) {
		return get(url, params, null);
	}

	/**
	 * Get方式提交,URL中不包含查询参数, 格式:http://www.g.cn
	 * 
	 * @param url
	 *            提交地址
	 * @param params
	 *            查询参数集, 键/值对
	 * @param charset
	 *            参数提交编码集
	 * @return 响应消息
	 */
	public static String get(String url, Map<String, String> params,
			String charset) {
		if (url == null || StringUtils.isEmpty(url)) {
			return null;
		}
		List<NameValuePair> qparams = getParamsList(params);
		if (qparams != null && qparams.size() > 0) {
			charset = (charset == null ? CHARSET_UTF8 : charset);
			String formatParams = URLEncodedUtils.format(qparams, charset);
			url = (url.indexOf("?")) < 0 ? (url + "?" + formatParams) : (url
					.substring(0, url.indexOf("?") + 1) + formatParams);
		}
		DefaultHttpClient httpclient = getDefaultHttpClient(charset);
		HttpGet hg = new HttpGet(url);
		// 发送请求,得到响应
		String responseStr = null;
		try {
			responseStr = httpclient.execute(hg, responseHandler);
		} catch (ClientProtocolException e) {
			throw new NetServiceException("客户端连接协议错误", e);
		} catch (IOException e) {
			throw new NetServiceException("IO操作异常", e);
		} finally {
			abortConnection(hg, httpclient);
		}
		return responseStr;
	}

	public static String getByProxy(String url, Map<String, String> params,
			String charset) {
		if (url == null || StringUtils.isEmpty(url)) {
			return null;
		}
		List<NameValuePair> qparams = getParamsList(params);
		if (qparams != null && qparams.size() > 0) {
			charset = (charset == null ? CHARSET_UTF8 : charset);
			String formatParams = URLEncodedUtils.format(qparams, charset);
			url = (url.indexOf("?")) < 0 ? (url + "?" + formatParams) : (url
					.substring(0, url.indexOf("?") + 1) + formatParams);
		}
		DefaultHttpClient httpclient = getDefaultHttpClientByProxy(charset);
		HttpGet hg = new HttpGet(url);
		// 发送请求,得到响应
		String responseStr = null;
		try {
			responseStr = httpclient.execute(hg, responseHandler);
		} catch (ClientProtocolException e) {
			throw new NetServiceException("客户端连接协议错误", e);
		} catch (IOException e) {
			throw new NetServiceException("IO操作异常", e);
		} finally {
			abortConnection(hg, httpclient);
		}
		return responseStr;
	}

	/**
	 * Post方式提交,URL中不包含提交参数, 格式:http://www.g.cn
	 * 
	 * @param url
	 *            提交地址
	 * @param params
	 *            提交参数集, 键/值对
	 * @return 响应消息
	 */
	public static String post(String url, Map<String, String> params) {
		return post(url, params, null);
	}

	/**
	 * Post方式提交,URL中不包含提交参数, 格式:http://www.g.cn
	 * 
	 * @param url
	 *            提交地址
	 * @param params
	 *            提交参数集, 键/值对
	 * @param charset
	 *            参数提交编码集
	 * @return 响应消息
	 */
	public static String post(String url, Map<String, String> params,
			String charset) {
		if (url == null || StringUtils.isEmpty(url)) {
			return null;
		}
		// 创建HttpClient实例
		DefaultHttpClient httpclient = getDefaultHttpClient(charset);
		UrlEncodedFormEntity formEntity = null;
		try {
			if (charset == null || StringUtils.isEmpty(charset)) {
				formEntity = new UrlEncodedFormEntity(getParamsList(params));
			} else {
				formEntity = new UrlEncodedFormEntity(getParamsList(params),
						charset);
			}
		} catch (UnsupportedEncodingException e) {
			throw new NetServiceException("不支持的编码集", e);
		}
		HttpPost hp = new HttpPost(url);
		hp.setEntity(formEntity);
		// 发送请求,得到响应
		String responseStr = null;
		try {
			responseStr = httpclient.execute(hp, responseHandler);
		} catch (ClientProtocolException e) {
			throw new NetServiceException("客户端连接协议错误", e);
		} catch (IOException e) {
			throw new NetServiceException("IO操作异常", e);
		} finally {
			abortConnection(hp, httpclient);
		}
		return responseStr;
	}

	/**
	 * Post方式提交,忽略URL中包含的参数,解决SSL双向数字证书认证
	 * 
	 * @param url
	 *            提交地址
	 * @param params
	 *            提交参数集, 键/值对
	 * @param charset
	 *            参数编码集
	 * @param keystoreUrl
	 *            密钥存储库路径
	 * @param keystorePassword
	 *            密钥存储库访问密码
	 * @param truststoreUrl
	 *            信任存储库绝路径
	 * @param truststorePassword
	 *            信任存储库访问密码, 可为null
	 * @return 响应消息
	 * @throws NetServiceException
	 */
	public static String post(String url, Map<String, String> params,
			String charset, final URL keystoreUrl,
			final String keystorePassword, final URL truststoreUrl,
			final String truststorePassword) {
		if (url == null || StringUtils.isEmpty(url)) {
			return null;
		}
		DefaultHttpClient httpclient = getDefaultHttpClient(charset);
		UrlEncodedFormEntity formEntity = null;
		try {
			if (charset == null || StringUtils.isEmpty(charset)) {
				formEntity = new UrlEncodedFormEntity(getParamsList(params));
			} else {
				formEntity = new UrlEncodedFormEntity(getParamsList(params),
						charset);
			}
		} catch (UnsupportedEncodingException e) {
			throw new NetServiceException("不支持的编码集", e);
		}
		HttpPost hp = null;
		String responseStr = null;
		try {
			KeyStore keyStore = createKeyStore(keystoreUrl, keystorePassword);
			KeyStore trustStore = createKeyStore(truststoreUrl,
					keystorePassword);
			SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore,
					keystorePassword, trustStore);
			Scheme scheme = new Scheme(SSL_DEFAULT_SCHEME, socketFactory,
					SSL_DEFAULT_PORT);
			httpclient.getConnectionManager().getSchemeRegistry()
					.register(scheme);
			hp = new HttpPost(url);
			hp.setEntity(formEntity);
			responseStr = httpclient.execute(hp, responseHandler);
		} catch (NoSuchAlgorithmException e) {
			throw new NetServiceException("指定的加密算法不可用", e);
		} catch (KeyStoreException e) {
			throw new NetServiceException("keytore解析异常", e);
		} catch (CertificateException e) {
			throw new NetServiceException("信任证书过期或解析异常", e);
		} catch (FileNotFoundException e) {
			throw new NetServiceException("keystore文件不存在", e);
		} catch (IOException e) {
			throw new NetServiceException("I/O操作失败或中断 ", e);
		} catch (UnrecoverableKeyException e) {
			throw new NetServiceException("keystore中的密钥无法恢复异常", e);
		} catch (KeyManagementException e) {
			throw new NetServiceException("处理密钥管理的操作异常", e);
		} finally {
			abortConnection(hp, httpclient);
		}
		return responseStr;
	}

	/**
	 * 获取DefaultHttpClient实例
	 * 
	 * @param charset
	 *            参数编码集, 可空
	 * @return DefaultHttpClient 对象
	 */
	private static DefaultHttpClient getDefaultHttpClient(final String charset) {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		httpclient.getParams().setParameter(
				CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
		// 模拟浏览器,解决一些服务器程序只允许浏览器访问的问题
		httpclient
				.getParams()
				.setParameter(
						CoreProtocolPNames.USER_AGENT,
						"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");// 我本机实际的User-Agent
		httpclient.getParams().setParameter(
				CoreProtocolPNames.USE_EXPECT_CONTINUE, Boolean.FALSE);
		httpclient.getParams().setParameter(
				CoreProtocolPNames.HTTP_CONTENT_CHARSET,
				charset == null ? CHARSET_UTF8 : charset);
		httpclient.setHttpRequestRetryHandler(requestRetryHandler);
		HttpParams params = httpclient.getParams();
		HttpConnectionParams.setConnectionTimeout(params,
				connectionTimeoutMillis);
		HttpConnectionParams.setSoTimeout(params, socketTimeoutMillis);
		return httpclient;
	}

	private static DefaultHttpClient getDefaultHttpClientByProxy(
			final String charset) {
		DefaultHttpClient httpclient = new DefaultHttpClient();
		String filePath = "D:/sts/workspace-sts-2.5.1_t1/sf3a/src/main/resources/proxy.properties";
		HttpHost proxy = null;
		Map<String, String> map = PropertiesUtil.readProperties(filePath);
		if (map.size() == 0) {
			throw new RuntimeException("无可用代理");
		} else {
			Set<String> set = map.keySet();
			String[] array = (String[]) set.toArray(new String[set.size()]);
			Random r = new Random();
			int rnum = r.nextInt(array.length);
			String ip = array[rnum];
			String port = map.get(ip);
			proxy = new HttpHost(ip, Integer.parseInt(port));
		}
		httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
				proxy);
		httpclient.getParams().setParameter(
				CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
		// 模拟浏览器,解决一些服务器程序只允许浏览器访问的问题
		httpclient
				.getParams()
				.setParameter(
						CoreProtocolPNames.USER_AGENT,
						"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");// 我本机实际的User-Agent
		httpclient.getParams().setParameter(
				CoreProtocolPNames.USE_EXPECT_CONTINUE, Boolean.FALSE);
		httpclient.getParams().setParameter(
				CoreProtocolPNames.HTTP_CONTENT_CHARSET,
				charset == null ? CHARSET_UTF8 : charset);
		httpclient.setHttpRequestRetryHandler(requestRetryHandler);
		HttpParams params = httpclient.getParams();
		HttpConnectionParams.setConnectionTimeout(params,
				connectionTimeoutMillis);
		HttpConnectionParams.setSoTimeout(params, socketTimeoutMillis);
		return httpclient;
	}

	/**
	 * 释放HttpClient连接
	 * 
	 * @param hrb
	 *            请求对象
	 * @param httpclient
	 *            client对象
	 */
	private static void abortConnection(final HttpRequestBase hrb,
			final HttpClient httpclient) {
		if (hrb != null) {
			hrb.abort();
		}
		if (httpclient != null) {
			httpclient.getConnectionManager().shutdown();
		}
	}

	/**
	 * 从给定的路径中加载此 KeyStore
	 * 
	 * @param url
	 *            keystore URL路径
	 * @param password
	 *            keystore访问密钥
	 * @return keystore 对象
	 */
	private static KeyStore createKeyStore(final URL url, final String password)
			throws KeyStoreException, NoSuchAlgorithmException,
			CertificateException, IOException {
		if (url == null) {
			throw new IllegalArgumentException("Keystore url may not be null");
		}
		KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
		InputStream is = null;
		try {
			is = url.openStream();
			keystore.load(is, password != null ? password.toCharArray() : null);
		} finally {
			if (is != null) {
				is.close();
				is = null;
			}
		}
		return keystore;
	}

	/**
	 * 将传入的键/值对参数转换为NameValuePair参数集
	 * 
	 * @param paramsMap
	 *            参数集, 键/值对
	 * @return NameValuePair参数集
	 */
	private static List<NameValuePair> getParamsList(
			Map<String, String> paramsMap) {
		if (paramsMap == null || paramsMap.size() == 0) {
			return null;
		}
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		for (Map.Entry<String, String> map : paramsMap.entrySet()) {
			params.add(new BasicNameValuePair(map.getKey(), map.getValue()));
		}
		return params;
	}

	/**
	 * 用于不规范的URI 由于URISyntaxException返回与此 URL 等效的 URI。此方法的作用与 new URI
	 * (this.toString()) 相同。 注意,任何 URL 实例只要遵守 RFC 2396 就可以转化为 URI。但是,有些未严格遵守该规则的
	 * URL 将无法转化为 URI。
	 * 
	 * @param strUrl
	 * @return
	 * @throws IOException
	 */
	public static String getDocument(String strUrl, String charset)
			throws IOException {
		StringBuffer document = new StringBuffer();
		try {
			URL url = new URL(strUrl);
			URLConnection conn = url.openConnection();
			conn.setConnectTimeout(connectionTimeoutMillis);
			conn.setReadTimeout(socketTimeoutMillis);
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					conn.getInputStream(), charset));
			String line = null;
			while ((line = reader.readLine()) != null)
				document.append(line);
			reader.close();
		} catch (MalformedURLException ex) {
			throw ex;
		} catch (IOException ex) {
			throw ex;
		}
		return document.toString();

	}

	public static String getGetUrl(String url, Map<String, String> params) {
		if (url == null || StringUtils.isEmpty(url)) {
			return "";
		}
		List<NameValuePair> qparams = getParamsList(params);
		if (qparams != null && qparams.size() > 0) {
			String formatParams = format(qparams);
			url = (url.indexOf("?")) < 0 ? (url + "?" + formatParams) : (url
					.substring(0, url.indexOf("?") + 1) + formatParams);
		}
		return url;
	}

	private static String format(List<? extends NameValuePair> parameters) {
		StringBuilder result = new StringBuilder();
		for (NameValuePair parameter : parameters) {
			String encodedName = parameter.getName();
			String value = parameter.getValue();
			String encodedValue = (value != null) ? value : "";
			if (result.length() > 0)
				result.append("&");
			result.append(encodedName);
			result.append("=");
			result.append(encodedValue);
		}
		return result.toString();
	}

	public static boolean checkProxy(String ip, String port) {
		boolean flag = false;
		DefaultHttpClient httpclient = new DefaultHttpClient();
		try {
			// 设置代理服务器地址和端口
			HttpHost proxy = new HttpHost(ip, Integer.parseInt(port));
			httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
					proxy);
			httpclient.getParams().setParameter(
					CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
			// 模拟浏览器,解决一些服务器程序只允许浏览器访问的问题
			httpclient
					.getParams()
					.setParameter(
							CoreProtocolPNames.USER_AGENT,
							"Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");// 我本机实际的User-Agent
			httpclient.getParams().setParameter(
					CoreProtocolPNames.USE_EXPECT_CONTINUE, Boolean.FALSE);
			httpclient.getParams().setParameter(
					CoreProtocolPNames.HTTP_CONTENT_CHARSET, CHARSET_UTF8);
			httpclient.setHttpRequestRetryHandler(requestRetryHandler);
			HttpParams params = httpclient.getParams();
			HttpConnectionParams.setConnectionTimeout(params,
					connectionTimeoutMillis);
			HttpConnectionParams.setSoTimeout(params, socketTimeoutMillis);
			HttpHost targetHost = new HttpHost("http://www.google.com.hk", 80,
					"http");
			HttpGet httpget = new HttpGet("/");
			HttpResponse response = httpclient.execute(targetHost, httpget);
			System.out
					.println(ip + ":" + port + "=" + response.getStatusLine());
			if (response.getStatusLine().getStatusCode() == 200) {
				flag = true;
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			flag = false;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			flag = false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			flag = false;
		} finally {
			httpclient.getConnectionManager().shutdown();
		}
		return flag;
	}
}

7 楼 mazhiyuan 2011-03-17  
lz把HttpClient那个类也贴出来啊
6 楼 nkliuliu 2011-03-17  
lym6520 写道
Google 做了很多抓取的屏蔽操作,试了下JE的,虽然JE也做了抓取屏蔽,不过很容易跳过JE的过滤,只要设置User-Agent属性就行了。

没有用,已经设置过了。在
HttpclientUtil.getByProxy(url, params, "UTF-8");  
里的实现方法里设置过。
5 楼 hui_windows 2011-03-17  
有意思,回去试试~
4 楼 lym6520 2011-03-17  
Google 做了很多抓取的屏蔽操作,试了下JE的,虽然JE也做了抓取屏蔽,不过很容易跳过JE的过滤,只要设置User-Agent属性就行了。
3 楼 zk1878 2011-03-17  
很暴力,必须顶
2 楼 hwx521 2011-03-17  
带上jar包啊!!
1 楼 wangkaiyong 2011-03-16  
有相应的jar包吗?自己玩玩

相关推荐

    相关词抓取软件

    标题中的“相关词抓取软件”指的是用于搜索引擎优化(SEO)的一种工具,它能帮助用户自动获取与目标关键词相关的搜索词汇。在竞价排名或者搜索引擎营销(SEM)中,了解并使用相关词是至关重要的,因为它们能提高广告...

    WordBuilder百度google热门搜索词分析程序.rar

    WordBuilder是一款针对百度和Google搜索引擎的热门搜索词分析程序,虽然描述中提到它是一个较旧的程序,可能无法直接编译运行,但它仍然可以作为理解搜索引擎优化(SEO)策略和关键词研究的重要参考资料。...

    搜索建议关键词抓取器

    它能够自动从多个主流平台,包括Google、百度、淘宝、亚马逊和速卖通,抓取搜索建议的关键词,帮助用户洞察用户在这些平台上的搜索习惯和热门趋势。 在SEO领域,了解并利用有效的关键词至关重要。搜索建议关键词是...

    keyword-scraper:通过抓取Google为之提供的相关搜索来收集给定搜索词的长尾关键词

    通过抓取Google为之提供的相关搜索来收集给定搜索词的长尾关键词。 用法 克隆仓库: git clone https://github.com/datagrab/keyword-scraper.git 安装依赖项: npm install 运行它: node scraper.js --keyword=...

    一个Python模块用于抓取几个搜索引擎bd,gg,soso

    2. **构建搜索请求:** 根据用户提供的关键词和其他搜索参数,构建相应的搜索请求URL,包括搜索词、页面数量、排序方式等。 3. **发送HTTP请求:** 使用Python中的HTTP库(例如Requests)发送搜索请求,并获取搜索...

    百度关键词多层抓取

    抓取关键词就是通过各种方法获取这些搜索词的过程。百度作为中国最大的搜索引擎,其关键词的抓取策略与谷歌等其他搜索引擎可能有所不同,因此,针对百度的关键词抓取需要专门的工具和策略。 多层抓取意味着不仅仅...

    google-crawler:一个简单的用于获取Google搜索结果的抓取工具

    一个简单的Crawler,用于获取Google搜索结果。 该组件可用于检索搜索词的100个第一结果。 由于Google会检测到搜寻器并在发出多个请求时阻止IP,因此该组件准备使用某些在线代理服务,例如hide.me。 安装 使用安装...

    googlesearch:用于抓取Google搜索引擎的Python库

    谷歌搜索googlesearch是一个Python库,可轻松搜索Google。 googlesearch使用请求和BeautifulSoup4抓取Google。安装要安装,请运行以下命令:python3 -m pip install googlesearch-python用法要获取搜索字词的结果,...

    谷歌邮箱搜索器

    在谷歌搜索引擎中,关键词是用户输入搜索框内以获取相关信息的词或短语。正确地选择和使用关键词是进行有效搜索的关键。在谷歌邮箱搜索器中,用户可以输入特定的关键词,比如公司名、行业术语或者特定项目名称,来...

    google搜索算法重要核心

    标题中的“google搜索算法重要核心”指的主要是Google在搜索引擎技术方面所采用的关键算法,这些算法使得Google能够高效、准确地处理海量数据,为用户提供快速且相关的搜索结果。描述中提到的“并行计算”,是Google...

    模拟Google搜索 JSP java

    在本项目中,"模拟Google搜索 JSP java" 的目标是利用这些技术创建一个类似于Google搜索引擎的功能,允许用户输入关键词并返回相关结果。这个过程涉及了多个知识点,包括但不限于以下几个方面: 1. **JSP基础**:...

    Google-Web-Scraper:该Python代码会抓取Google搜索结果,然后应用情感分析,生成文本摘要并对关键字进行排名

    这段Python代码会抓取Google搜索结果,然后进行情感分析(同时使用TextBlob和VADER),为每个分类生成文本摘要(4种不同的方法),并为每个分类对停用词清除后的关键字进行排名。 结果显示在屏幕上,并另存为文本...

    模拟google搜索

    【标题】"模拟Google搜索"涉及的是通过编程技术来实现类似Google搜索引擎的功能,这通常涉及到网络爬虫、数据抓取、关键词匹配以及信息检索等多个IT领域的知识点。 在互联网上,Google搜索是全球最广泛使用的搜索...

    复杂的1秒图解Google搜索技术

    **标题:“复杂的1秒图解Google搜索技术”** 在当今信息爆炸的时代,搜索引擎扮演着至关重要的角色,而Google作为全球最知名的搜索引擎,其搜索技术无疑是业界的翘楚。本篇文章将深入探讨Google如何在短短1秒钟内...

    Learn Google

    《Learn Google》这本书不仅为我们提供了谷歌搜索引擎的全面解读,还介绍了谷歌的多项业务,展示了这家科技巨头如何利用先进的IT技术为全球用户提供便捷、高效的信息服务。对于IT专业人士和普通用户而言,深入理解...

    百度google综合搜索引擎源码

    5. **查询处理**:用户输入查询后,搜索引擎需要解析查询语句,处理同义词、拼写纠错,并根据索引找到相关文档。 6. **排序算法**:对搜索结果进行排序,通常基于PageRank、TF-IDF、BM25等算法,结合点击率、用户...

    类似google搜索功能实现

    在IT行业中,实现类似Google搜索功能是一项复杂而高级的任务,涉及到搜索引擎优化(SEO)、信息检索、数据处理和算法等多个领域的知识。以下将详细介绍这个过程的关键技术点。 首先,我们需要理解Google搜索的核心...

    谷歌灰色词排名推广怎么做

    谷歌灰色词排名推广是指针对谷歌搜索引擎优化的一种策略,特别是针对那些在法律边缘或不被官方推荐的关键词(灰色词)进行的排名提升。这种推广方式通常涉及到技术手段,旨在让含有灰色关键词的网页在谷歌搜索结果中...

    为网站添加搜索功能类似于在google里搜索自己的网站(java语言版)

    【标题】:为网站添加搜索功能类似于在Google里搜索自己...总的来说,通过这个项目,你将学习到如何利用Java和相关工具构建一个内部搜索引擎,为你的网站提供高效且定制化的搜索体验,类似于用户在Google中搜索的体验。

Global site tag (gtag.js) - Google Analytics