HttpClient+Jsoup 抓取网页信息

利用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+Jsoup 抓取网页信息_第1张图片

然后我们首先要分析网页源代码的结构

HttpClient+Jsoup 抓取网页信息_第2张图片

之后我们就可以开始进行编程了,首先我们要知道利用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);
        try {  
            HttpResponse responce = httpClient.execute(httpget);
            int resStatu = responce.getStatusLine().getStatusCode();
            if (resStatu == HttpStatus.SC_OK) {
                  
                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("=============================================================");
        }
        
    }
}

运行之后的效果如下

HttpClient+Jsoup 抓取网页信息_第3张图片


你可能感兴趣的:(Java)