全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Java实现多种方式的http数据抓取

前言:

时下互联网第一波的浪潮已消逝,随着而来的基于万千数据的物联网时代,因而数据成为企业的重要战略资源之一。基于数据抓取技术,本文介绍了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依赖

...
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.3</version>
</dependency>

<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java抓取http数据包  # java  # 抓取网页数据  # java实现网页内容抓取  # java发起http请求获取返回的Json对象方法  # JAVA发送http get/post请求  # 调用http接口、方法详解  # JAVA发送HTTP请求  # 返回HTTP响应内容  # 应用及实例代码  # Java实现调用对方http接口得到返回数据  # 自带  # 互联网  # 而来  # 感兴趣  # 时下  # 大家多多  # 第一波  # getResponseCode  # String  # int  # static  # url  # openConnection  # charset  # JDKFetch  # conn  # Exception  # public  # HttpFetchUtil  # return 


相关文章: 如何在阿里云虚拟服务器快速搭建网站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何解决VPS建站LNMP环境配置常见问题?  高防服务器租用如何选择配置与防御等级?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  建站三合一如何选?哪家性价比更高?  常州企业建站如何选择最佳模板?  建站主机如何选?高性价比方案全解析  广州建站公司哪家好?十大优质服务商推荐  建站之星2.7模板快速切换与批量管理功能操作指南  定制建站价位费用解析与套餐推荐全攻略  平台云上自助建站如何快速打造专业网站?  C++如何使用std::optional?(处理可选值)  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  香港服务器选型指南:免备案配置与高效建站方案解析  如何通过.red域名打造高辨识度品牌网站?  建站之星如何保障用户数据免受黑客入侵?  建站之星导航菜单设置与功能模块配置全攻略  开心动漫网站制作软件下载,十分开心动画为何停播?  IOS倒计时设置UIButton标题title的抖动问题  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  音乐网站服务器如何优化API响应速度?  简单实现Android文件上传  长沙企业网站制作哪家好,长沙水业集团官方网站?  网站制作模板下载什么软件,ppt模板免费下载网站?  如何配置IIS站点权限与局域网访问?  b2c电商网站制作流程,b2c水平综合的电商平台?  ,交易猫的商品怎么发布到网站上去?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  建站之星24小时客服电话如何获取?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  如何挑选最适合建站的高性能VPS主机?  如何有效防御Web建站篡改攻击?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  建站之星如何快速更换网站模板?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  在线教育网站制作平台,山西立德教育官网?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  郑州企业网站制作公司,郑州招聘网站有哪些?  如何在IIS中配置站点IP、端口及主机头?  如何在云主机上快速搭建多站点网站?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  怀化网站制作公司,怀化新生儿上户网上办理流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。