利用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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值