废话不多说直接讲讲今天要做的事。
利用HttpClient和Jsoup技术抓取网页信息。HttpClient是支持HTTP协议的客户端编程工具包,并且它支持HTTP协议。
jsoup 是一款基于 Java 平台的 网页html解析器,可直接解析某个 URL 地址、HTML 文本内容,提供了一套非常方便的 API接口,通过类似于 jQuery 的操作方法来操作数据。
httpClient相关文档:http://hc.apache.org/httpcomponents-client-5.0.x/index.html
jsoup相关文档:http://jsoup.org/
此处以网易贵金属资讯为例进行案例教学 O(∩_∩)O
然后我们首先要分析网页源代码的结构
之后我们就可以开始进行编程了,首先我们要知道利用httpClient的流程:
1. 创建HttpClient的对象;
2. 创建请求方法的实例,并指定访问的URL;
3. 调用HttpClient对象发送请求,该方法返回一个HttpResponse,要判断responce.getStatusLine().getStatusCode()的返回码是否为200;
4. 调用HttpResponse相关方法获取相应内容;
5. 释放连接。
当然啦 创建项目的时候要导入相关的jar包,本文会提供源码+jar包http://pan.baidu.com/s/1sl55d85
StockUtils.java
package cn.clay.httpclient.utils; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; /** * 传递网页链接 * 返回网页源码 * @author ClayZhang * */ public class StockUtils { //第一次获取网页源码 public static String getHtmlByUrl(String url) throws IOException{ String html = null; CloseableHttpClient httpClient = HttpClients.createDefault();//创建httpClient对象 HttpGet httpget = new HttpGet(url);//以get方式请求该URL try { HttpResponse responce = httpClient.execute(httpget);//得到responce对象 int resStatu = responce.getStatusLine().getStatusCode();//返回码 if (resStatu == HttpStatus.SC_OK) {//200正常 其他就不对 //获得相应实体 HttpEntity entity = responce.getEntity(); if (entity != null) { html = EntityUtils.toString(entity);//获得html源代码 } } } catch (Exception e) { System.out.println("访问【"+url+"】出现异常!"); e.printStackTrace(); } finally { //关闭连接 httpClient.close(); } return html; } }然后利用jsoup的方法进行测试类的编写StockTest.java
package cn.clay.httpclient.utils.test; import java.io.IOException; import org.apache.http.ParseException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import cn.clay.httpclient.utils.StockUtils; /** * * @author ClayZhang * */ public class StockTest { public static void main(String[] args) throws ParseException, IOException { String content = StockUtils.getHtmlByUrl( "http://fa.163.com/zx/gjs/1/"); parserHtml(content); } public static void parserHtml(String content) throws ParseException, IOException { Document doc = Jsoup.parse(content); Elements links = doc.getElementsByClass("g-news").select("dl"); for (Element e : links) { System.out.println("新闻标题:" + e.select("a").text().toString()); //获取页面链接 Elements linkHref = e.select("a"); //截取时间字符串 Elements timeStr = e.select("span[class=f-fr]"); //简略信息 Elements comment = e.select("span[class=f-fl f-ofe u-digest]"); System.out.println("新闻链接:" + linkHref.attr("href")); System.out.println("发布时间:" + timeStr.text()); System.out.println("简要信息:" + comment.text().toString()); System.out.println("============================================================="); } } }运行之后的效果如下
本文版权归作者及所有,转载请注明作者及原文出处 也可关注 http://www.cnblogs.com/clayzhang