博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现多种方式的http数据抓取
阅读量:5339 次
发布时间:2019-06-15

本文共 5790 字,大约阅读时间需要 19 分钟。

前言:
  时下互联网第一波的浪潮已消逝,随着而来的基于万千数据的物联网时代,因而数据成为企业的重要战略资源之一。基于数据抓取技术,本文介绍了java相关抓取工具,并附上demo源码供感兴趣的朋友测试!

 

1)JDK自带HTTP连接,获取页面或Json

 

2) JDK自带URL连接,获取页面或Json

 

 

3)HttpClient Get工具,获取页面或Json

 

 

 4)commons-io工具,获取页面或Json

 

 

5) Jsoup工具(通常用于html字段解析),获取页面,非Json返回格式】

 


完整代码:

package com.yeezhao.common.http;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpMethod;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.io.IOUtils;import org.jsoup.Jsoup;/** * http工具对比 *  * @author Administrator -> junhong * *         2016年12月27日 */public class HttpFetchUtil {        /**     * 获取访问的状态码     * @param request     * @return     * @throws Exception     */    public static int getResponseCode(String request) throws Exception {        URL url = new URL(request);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        return conn.getResponseCode();    }    /**     * 1)JDK自带HTTP连接,获取页面或Json     * @param request     * @param charset     * @return     * @throws Exception     */    public static String JDKFetch(String request, String charset) throws Exception {        URL url = new URL(request);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        //模拟浏览器参数        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36"                + " (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {            InputStream input = conn.getInputStream();            StringBuffer sb = new StringBuffer();            BufferedReader reader = new BufferedReader(new InputStreamReader(input, charset));            String s;            while ((s = reader.readLine()) != null) {                sb.append(s + "\n");            }            input.close();            conn.disconnect();            return sb.toString();        }        return "";    }    /**     * 2) JDK自带URL连接,获取页面或Json     * @param request     * @param charset     * @return     * @throws Exception     */    public static String URLFetch(String request, String charset) throws Exception {        URL url = new URL(request);        return IOUtils.toString(url.openStream());    }    /**     * 3)HttpClient Get工具,获取页面或Json     * @param url     * @param charset     * @return     * @throws Exception     */    public static String httpClientFetch(String url, String charset) throws Exception {        // GET        HttpClient httpClient = new HttpClient();        httpClient.getParams().setContentCharset(charset);        HttpMethod method = new GetMethod(url);        httpClient.executeMethod(method);        return method.getResponseBodyAsString();    }    /**     * 4)commons-io工具,获取页面或Json     * @param url     * @param charset     * @return     * @throws Exception     */    public static String commonsIOFetch(String url, String charset) throws Exception {        return IOUtils.toString(new URL(url), charset);    }        /**     * 5) Jsoup工具(通常用于html字段解析),获取页面,非Json返回格式     * @param url     * @return     * @throws Exception     */    public static String jsoupFetch(String url) throws Exception {        return Jsoup.parse(new URL(url), 2 * 1000).html();    }}

 

测试代码:

package com.yeezhao.common.http;import org.junit.After;import org.junit.Before;import org.junit.Test;/** * 测试类 * 3个测试链接: * 1)百科网页 * 2)浏览器模拟获取接口数据 * 3)获取普通接口数据 * @author Administrator -> junhong * * 2016年12月27日 */public class HttpFetchUtilTest {    String seeds[] = {"http://baike.baidu.com/view/1.htm","http://m.ximalaya.com/tracks/26096131.json","http://remyapi.yeezhao.com/api/query?wd=%E5%91%A8%E6%98%9F%E9%A9%B0%E7%9A%84%E7%94%B5%E5%BD%B1"};    final static String DEFAULT_CHARSET = "UTF-8";    @Before    public void setUp() throws Exception {    }    @After    public void tearDown() throws Exception {        System.out.println("--- down ---");    }    @Test    public void testGetResponseCode() throws Exception{        for(String seed:seeds){            int responseCode = HttpFetchUtil.getResponseCode(seed);            System.out.println("ret="+responseCode);        }    }    @Test    public void testJDKFetch() throws Exception{        for(String seed:seeds){            String ret = HttpFetchUtil.JDKFetch(seed, DEFAULT_CHARSET);            System.out.println("ret="+ret);        }    }    @Test    public void testURLFetch() throws Exception{        for(String seed:seeds){            String ret = HttpFetchUtil.URLFetch(seed, DEFAULT_CHARSET);            System.out.println("ret="+ret);        }    }    @Test    public void testHttpClientFetch()throws Exception {        for(String seed:seeds){            String ret = HttpFetchUtil.httpClientFetch(seed, DEFAULT_CHARSET);            System.out.println("ret="+ret);        }    }    @Test    public void testCommonsIOFetch()throws Exception {        for(String seed:seeds){            String ret = HttpFetchUtil.commonsIOFetch(seed, DEFAULT_CHARSET);            System.out.println("ret="+ret);        }    }    @Test    public void testJsoupFetch() throws Exception{        for(String seed:seeds){            String ret = HttpFetchUtil.jsoupFetch(seed);            System.out.println("ret="+ret);        }    }}

 

 

附:相关jar依赖

...
org.jsoup
jsoup
1.7.3
commons-httpclient
commons-httpclient
3.1
commons-io
commons-io
2.4
...

 

后语:

  现在的数据时代,有着"数据即财富"的理念。因此,数据抓取技术将一直发展更新,基于此后续还将扩充针对POST方法的抓取方式,敬请期待!

转载于:https://www.cnblogs.com/SeaSky0606/p/6224964.html

你可能感兴趣的文章
oracle数据库安装过程中的疑惑—该记录是本人以前写在微博上的文章
查看>>
js 滚动 学习
查看>>
Java Web(八) -- Ajax & Jquer
查看>>
JAVA8List排序,(升序,倒序)
查看>>
客户端读取图片文件
查看>>
EXTJS 4.2 实现 gridpanel 鼠标悬停单元格以提示信息的方式显示单元格内容。
查看>>
C# 泛型类(函数)的实例化
查看>>
python字符串之split
查看>>
Extensible Messaging and Presence Protocol (XMPP): Core
查看>>
Java多线程共享变量控制
查看>>
列表(list)小总结
查看>>
RabbitMQ消息机制广播分发
查看>>
requestAnimationFrame兼容性扩展
查看>>
调用图灵机器人做一个简单的机器人聊天
查看>>
Redis配置文件分析
查看>>
uniapp 检测android 是否开启GPS功能
查看>>
Valgrind工具简介
查看>>
几句话总结一个算法之Policy Gradients
查看>>
搬家来博客园了
查看>>
Asp.net MVC Global.asax文件
查看>>