您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

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

时间:2022-10-31 15:36:33  来源:今日头条  作者:MYJ2C混淆

对于数据抓取技术,本文介绍了JAVA相关抓取工具,并附上demo源码供感兴趣的朋友测试!

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

 

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

 

 

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

 

 

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

 

 

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

 

 

package cn.myj2c.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工具对比
 * 
 */
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 cn.myj2c.common.http;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
 * 测试类
 * 3个测试链接:
 * 1)百科网页
 * 2)浏览器模拟获取接口数据
 * 3)获取普通接口数据
 */
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);
        }
    }

}


Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
早高峰打“飞的”有多快?半小时车程仅需6分钟
横越珠江,掠过广东省博物馆、花城广场等地标性景观,向着广州塔飞去……近日,小鹏汇天的eVTOL(电动垂直起降飞行器)旅航者X2首次飞跃广州CBD。跨江示范飞行中,半小时车...【详细内容】
2024-04-12  Search:   点击:(1)  评论:(0)  加入收藏
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
Rust编程语言的内存安全与性能:如何平衡?
Rust编程语言自诞生以来,就以其独特的内存安全特性和高性能而备受瞩目。然而,如何在保证内存安全的同时,实现高效的性能,一直是Rust开发者们面临的挑战。本文将深入探讨Rust的内...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
数字人破解跨境直播难题,打造经济高效运营新路径
在数字化浪潮席卷全球,跨境直播蔚然成风之际,众多企业与品牌纷纷借此渠道掘金国际市场,直面全球消费者。然而,构建一支专业且高能的直播团队并非一日之功,它需耗费大量资源进行人...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
Meta确认5月发布Llama 3,参数量达1400亿
周二,在伦敦的一场活动上,Meta 确认计划在下个月初推出其 LLM 的最新版 Llama 3,这个模型是驱动生成式 AI 助手的核心技术。这一消息证实了《The Information》杂志周一发布的...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
ChatGPT 应用商店?可能是一个万能应用程序!
OpenAI 在去年 11 月召开了一次开发者大会,首席执行官 Sam Altman 希望软件制造商在 ChatGPT 之上进行进一步的构建。OpenAI 表示,它将很快推出一个市场,开发人员和非技术人员...【详细内容】
2024-04-12  Search:   点击:(3)  评论:(0)  加入收藏
社交网络与Web3:数字社交的演进
在数字化时代的浪潮下,社交网络已成为人们日常生活的重要组成部分。从早期的在线论坛到如今的社交媒体平台,社交网络已经成为人们交流、分享和获取信息的主要渠道。然而,随着区...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
速查微信聊天最频繁对象,情侣必备!
在如今数字化交流的时代,微信无疑是我们日常生活中使用最频繁的工具之一。无论是工作、学习还是娱乐,微信都陪伴在我们身边,成为我们沟通的重要桥梁。而在微信的众多功能中,聊天...【详细内容】
2024-04-12  Search:   点击:(1)  评论:(0)  加入收藏
女人在微信上给你发这两个字,其实是想你了
情感的表达需借助书信,那一份份缓慢穿越时空的纸张,承载着承诺与深情,往往能够维系一段白头偕老的姻缘。而如今,随着科技的进步,爱情已不再依赖书信这种传统的沟通方式。我们有了...【详细内容】
2024-04-12  Search:   点击:(2)  评论:(0)  加入收藏
Qt与Flutter:在跨平台UI框架中哪个更受欢迎?
在跨平台UI框架领域,Qt和Flutter是两个备受瞩目的选择。它们各自具有独特的优势,也各自有着广泛的应用场景。本文将对Qt和Flutter进行详细的比较,以探讨在跨平台UI框架中哪个更...【详细内容】
2024-04-12  Search:   点击:(1)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(15)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(24)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(27)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(57)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(70)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(73)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(90)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(107)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(99)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(78)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条