小组分享内容

目录

1.网络爬虫的作用(人话):

2.使用的工具

3.不使用程序进行网页信息的获取的操作步骤

4.如何使用程序来进行上述操作

        1.打开浏览器

        2.输入网址

       3.发送请求

        4.获取响应        

        5.判断响应是否成功

        6.获取响应里需要的内容

        7.记得最后关闭浏览器和response 

        8.完整的简单示例

5.带参数的get请求

        1.如何使用发送带参数的get请求

        2.如何创建这个URI呢

                1.首先创建一个URIBulider对象,构造方法形参就是个URL

                2.创建好URIBulider对象之后需要给这个URI设置参数

                3.仅仅设置参数还不够,还需要创建出来URI对象呢

                4.后续操作就和之前的一样了 


1.网络爬虫的作用(人话):

        使用程序获取网络资源

2.使用的工具

        1.maven来管理依赖

                需要引入进来httpclient5依赖,否则没有需要的类

                需要引入slf4j-log4j12来进行日志的处理

                        引入进来日志之后还需要进行修改,否则会报错,不引入这个玩意来搞日志也会报错,需要在resouces中新建一个名为log4j.properties的文件,并且复制进去下方的配置信息

log4j.rootLogger = DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

        2.使用java的HttpClient来进行网页数据的抓取

        3.使用jsoup来分析抓取到的网络数据

3.不使用程序进行网页信息的获取的操作步骤

        3.1:打开浏览器

        3.2:输入网址

        3.3:按下回车(发出请求)

        3.4:获取响应

        3.5:解析响应成为人可以看懂的东西

4.如何使用程序来进行上述操作

        1.打开浏览器

        使用CloseableHttpClient来表示一个可以关闭的浏览器,所以首先创建一个浏览器对象

CloseableHttpClient closeableHttpClient = HttpClients.createDefault();

        2.输入网址

        使用HttpGet来向浏览器发送一个请求,请求的时候需要在创建对象的时候给这个对象一个形参,意思是要访问形参里的地址,在这里我选择了使用学校的雪梨官网,我怕别的网址违法

HttpGet url = new HttpGet("https://www.iqiyi.com/?vfm=f_809_lxm&fv=94f9f9e5a81b83a5");

       3.发送请求

        使用CloseableHttpClient对象的excute(网址)方法来模拟人按下回车的行为,这个方法会返回一个服务器方对我们的一个响应

closeableHttpClient.execute(url);

        4.获取响应        

        通过CloseableRespnose来接受服务器返回的响应

CloseableHttpResponse response = closeableHttpClient.execute(url);

        5.判断响应是否成功

        为了成功获得响应不获取乱七八糟的东西就要想办法判断一下是否是正确的反馈,所以使用CloseableClient对象的getCode方法来获取服务器提供的状态码(正常获取到信息时的状态码是200),只有当我获取到了正确的状态码我才进行下一步的处理

if(response.getCode()==200)

        6.获取响应里需要的内容

        获取到了响应还不够,咱需要获取到响应里的信息,可以通过CloseableResponse对象getEntity方法获取到响应体(响应头响应体响应行这些知识点可以参考下面这个帖子,我觉得这个解释的挺好理解的:HTTP响应是什么?_3、http响应的内容是什么-CSDN博客)可以通过EntityUtils类的静态方法toString来把响应体按照所需要的编码格式转化成字符串,访问雪梨获取到的就是他的html代码

if(response.getCode()==200)EntityUtils.toString(response.getEntity(),"utf8");

        7.记得最后关闭浏览器和response 

        8.完整的简单示例

package org.example;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import java.io.IOException;
public class CanNumGet {public static void main(String[] args) {//人工获取页面信息操作流程://打开浏览器CloseableHttpClient closeableHttpClient = HttpClients.createDefault();//输入网址HttpGet url = new HttpGet("http://www.edu2act.cn/votes/");CloseableHttpResponse response =null;//回车打开网址并且获取响应try {response= closeableHttpClient.execute(url);if(response.getCode()==200)System.out.println(EntityUtils.toString(response.getEntity(),"utf8"));} catch (IOException e) {e.printStackTrace();} catch (ParseException e) {throw new RuntimeException(e);} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}try {closeableHttpClient.close();} catch (IOException e) {e.printStackTrace();}}}
}

5.带参数的get请求

        之前的内容都是最基础的get请求,现在开始带参数的请求,在servlet的那节课的时候曾经提到过get请求可以有参数

        例如在进行搜索的时候会进行一个参数的传递,传递给后台

        1.如何使用发送带参数的get请求

                在之前的内容中只提到了如何发送get请求,当时使用的是new一个HttpGet请求,参数是个String类型的网址,其实他的构造方法还可以不传递网址,而是传递一个URI,这个URI对我来讲可以简单理解为一个URL带参数的查询方式,但这只是一种记忆方式,建议按照正规方式慢慢理解,可以参考下面两篇帖子

今天,彻底弄懂什么是URI-CSDN博客

URI是什么?-CSDN博客

第二篇建议从第三部分开始看,算是入正题了

        2.如何创建这个URI呢

                需要使用URIBulider类来创建,你可以把这玩意当作一个构造URI的构造器

                1.首先创建一个URIBulider对象,构造方法形参就是个URL

URIBuilder uriBuilder = new URIBuilder("http://www.edu2act.cn/votes/");

                2.创建好URIBulider对象之后需要给这个URI设置参数

                   使用URIBulider对象的addparametter("参数名(key)","参数值(value)"),这个方法的返回值就是调用该方法的对象,所以可以反复调用这个方法从而设置更多参数

 eg:uriBuilder.addParameter("key1","a").addParameter("key2","2").addParameter("key3","3");

这样子就相当于设置了三组参数

uriBuilder.addParameter("q","操作系统");

                3.仅仅设置参数还不够,还需要创建出来URI对象呢

HttpGet url = new HttpGet(uriBuilder.build());

                4.后续操作就和之前的一样了 

package org.example;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.net.URIBuilder;
import java.io.IOException;
import java.net.URISyntaxException;public class CanNumGet {public static void main(String[] args) {//人工获取页面信息操作流程://打开浏览器CloseableHttpClient closeableHttpClient = HttpClients.createDefault();URIBuilder uriBuilder = null;try {uriBuilder = new URIBuilder("http://www.edu2act.cn/votes/");uriBuilder.addParameter("q","操作系统");} catch (URISyntaxException e) {e.printStackTrace();}//输入网址HttpGet url = null;try {url = new HttpGet(uriBuilder.build());} catch (URISyntaxException e) {e.printStackTrace();}CloseableHttpResponse response =null;//回车打开网址并且获取响应try {response= closeableHttpClient.execute(url);if(response.getCode()==200)System.out.println(EntityUtils.toString(response.getEntity(),"utf8"));} catch (IOException e) {e.printStackTrace();} catch (ParseException e) {throw new RuntimeException(e);} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}try {closeableHttpClient.close();} catch (IOException e) {e.printStackTrace();}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2_3.Linux系统中的日志管理

# 1.journald # 服务名称:systemd-journald.service journalctl 默认日志存放路径: /run/log (1) journalctl命令的用法 journalctl -n 3 ##日志的最新3条--since "2020-05-01 11:00:00" ##显示11:00后的日…

基于STM32的汽车防窒息系统

文章目录 基于STM32的汽车防窒息系统系统简介材料展示视频制作硬件连接原理图PCB实物图GSM模块使用GSM模块代码 SGP30模块SGP30模块代码 步进电机驱动步进电机代码 其他模块主逻辑代码 总结 基于STM32的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行,汽车大…

GPT带我学-设计模式11-组合模式

设计模式类型 结构型设计模式 使用场景 将对象组合成树状结构来表现"部分-整体"的层次结构。这种模式能够使得客户端对单个对象和组合对象的使用具有一致性。这句话太抽象了,拿一个实际的网站菜单树例子来说。 例子:网页菜单树 一个网站的…

C++经典面试题目(十八)

1、请解释虚函数表的概念,并说明其在多态中的应用。 虚函数表(Vtable)是用于实现多态的一种机制,它是一个存储虚函数地址的表。每个含有虚函数的类都会有一个对应的虚函数表,其中存放着该类的虚函数的地址。当对象被创…

【CSS】伪元素

伪元素 常见的伪元素 ::first-line::first-letter::before 在元素第一个子元素前增加内容::after 在元素最后一个子元素后增加内容 为了区分伪类和伪元素,建议伪元素都使用2个冒号::first-line可以针对首行文本设置属性::first-letter可以针首字母设置属性::before…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”,可以保护表格不被他人随意打开,那如果后续不需要保护了,不想每次打开Excel都需要输密码,要怎么去除“打开密码”呢? 今天分享3个方法,最后一个方法记得收藏起来,以…

基于51单片机的智能报警系统Proteus仿真

地址:https://pan.baidu.com/s/10dhkyV5O629UpFHHV67LpQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectroni…

源码|并发一枝花之CopyOnWriteArrayList

CopyOnWriteArrayList的设计思想非常简单,但在设计层面有一些小问题需要注意。 JDK版本:oracle java 1.8.0_102 本来不想写的,但是github上CopyOnWriteArrayList的code results也有165k,为了流量还是写一写吧。 实现 看两个方法你…

LVS、HAProxy

集群:将很多个机器组织到一起,作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类:负载均衡集群:Load Balance。高可用集群:High Available。高性能集群:High Performance Com…

Python学习从0到1 day20 第二阶段 面向对象 ② 封装

缘分 朝生暮死犹如露水 —— 24.4.1 学习目标: 1.理解封装的概念 2.掌握私有成员的使用 一、面向对象三大特性: 面向对象编程,是许多编程语言都支持的一种编程思想 简单理解是:基于模板(类)去创建实体&…

请解释一下Velocity模板引擎的基本工作原理是什么?在Velocity中,如何定义和使用变量?

请解释一下Velocity模板引擎的基本工作原理是什么? Velocity模板引擎的基本工作原理可以概括为将数据模型与模板文件相结合,通过解析模板中的指令和占位符,将数据模型的内容填充到模板中,最终生成所需的文本输出。 具体来说&…

一个基于大数据的派单管理系统

通常需要处理大量的订单数据,并确保这些数据能够在各个相关部门之间高效、准确地传递。这样的系统不仅有助于提高派单效率,还能优化资源配置,减少不必要的浪费。以下是一个包含所需元素的系统设计方案概述: 数据结构 订单号&…

枚举---算法

1、定义 枚举算法:也称之为穷举算法,这种算法就是在解决问题的时候去使用所有的方式去解决这个问题,会通过推理去考虑事件发生的每一种可能,最后推导出结果。优点:简单粗暴,它暴力的枚举所有可能&#xff…

Mysql故障和优化

一、MySQL故障 二、MySQL优化 1.硬件优化: 2.数据库设计与规划 1.提前估计数据量,使用什么存储引擎 2.数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性 3.增加多台服务器,以达到稳定、高效的效果。主从同步、…

Flask Response生成流式数据api;iter_lines,iter_content遍历区别

1、Flask Response生成流式数据api 注意return与def generate():是同级的 from flask import Flask, Responseapp Flask(__name__)app.route(/stream) def stream_data():def generate():for i in range(5):time.sleep(1)yield f"Data chunk {i}\0" # 在每个数据…

风控系统:通过净值及盈亏开启和关闭自动交易

一、风控对交易员的好处 帮助交易员执行交易纪律并保护他们的交易资金。 纪律风控:对不符合交易纪律的交易执行风控,对交易纪律性差的交易员执行约束操作。净值风控:对满足条件的净值执行风控,防止交易员的账户净值过度下降。手数…

Mysql的库函数

MySQL是一个流行的开源关系型数据库管理系统,它提供了大量的内置库函数,用于在查询时执行各种操作。这些函数可以帮助开发者在数据检索、转换和处理过程中实现更复杂的逻辑。 1 字符串函数 函数描述ASCII(s)返回字符串 s 的第一个字符的 ASCII 码。CHA…

Memory Analyzer Tool使用教程

下载地址&#xff1a;https://eclipse.dev/mat/previousReleases.php 下载JDK8对应的MAT版本 使用jps查看pid jps 使用jmap生成heap dump文件 jmap -dump:formatb,live,filexxx.bin <pid> 使用MAT打开heap dump文件 查看GC Roots

【Linux入门】Linux简史

Linux 是什么&#xff1f;Linux 是一款叫做操作系统的软件。 操作系统这款软件有什么样的意义呢&#xff1f;简单来说&#xff0c;比如有顾客买了一台笔记本电脑&#xff0c;这台笔记本电脑由电脑硬件组成&#xff0c;在这堆硬件上一定搭载了一款操作系统。正因为操作系统存在&…

ssm013小型企业办公自动化系统的设计和开发+vue

小型企业办公自动化系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱&am…