萧逸闲侃

技术爱好者

利用httpclient抓取网页内容

前段时间听一同事说他写了个能批量查询手机号码归属地的程序,于是就想是什么机制能访问外网的网页,怎么实现参数传递的呢。最近接触到了httpclient,它可以模拟浏览器发出http请求,从而访问一个网页(或其它资源),于是就试着写一个获取手机号码的程序。

 

程序思路很简单:利用httpclient访问一个手机号码归属地查询网站,然后从期返回内容中提取相应需要的内容。

 

发送http请求访问网页代码如下:

 

// 构造HttpClient的实例
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
new HttpHost("cmnet-proxy.gmcc.net", 8081));
// 创建GET方法的实例
String urlString = "http://open.baidu.com/phone/s?wd=13711112222&tn=phone&owd=13711112222";
GetMethod method = new GetMethod(urlString);
// PostMethod method = new PostMethod(urlString);
// 使用系统提供的默认的恢复策略
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
//httpClient.getHostConfiguration().setProxy("XXX.XXX.XXX.XXX", 8080);
try {
// 执行getMethod
int statusCode = httpClient.executeMethod(method);
System.out.println(statusCode);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// 读取内容
String responseBody = method.getResponseBodyAsString();

} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
e.printStackTrace();
} finally {
// 释放连接
method.releaseConnection();
}


 

 

 

发出请求后,就抓取网页返回的内容了。

 

Document doc = Jsoup.parse(responseBody);
Elements links = doc.select("div");
for (Element link : links) {
if (link.attr("id").equals("op_mobilephonemid_res2")) {
for (int i = 0; i < 4; i++) {
Element temp = link.child(i);
String tempText = temp.text();
System.out.println(tempText);
}
}
}


 

 

看到打印出来的内容就完满成功了。

 

本文使用的技术:

commons-httpclient

jsoup用来解释html


阅读更多
个人分类: http
想对作者说点什么? 我来说一句

网页爬虫自动抓取网页内容

2011年08月04日 96KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭