详解用Java实现爬虫:HttpClient和Jsoup的介绍及使用(请求方式、请求参数、连接池、解析获取元素)

一、介绍:何为爬虫

网络爬虫(Web crawler)也叫做网络机器人 可以代替人 自动地在互联网中进行数据信息的采集和整理
是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本
可以自动采集所有其能够访问到的页面的内容 以获取相关数据

在大数据时代 信息的采集是一项重要的工作
而互联网中的数据是海量的 如果单纯靠人力进行信息采集 不仅低效繁琐 搜集的成本也会提高
爬虫技术就是为了解决如何高效地获取互联网中重要的信息

从功能上讲 爬虫分为数据采集 处理 储存三个部分
爬虫从一个或若干个初始网页的URL开始 获取初始网页的URL
在抓取网页的过程中 不断从当前页面上抽取新的URL放入队列 直到满足系统的一定停止条件最后结束爬取

二、Java爬虫所使用技术

其实爬虫的话在Python中应用的会更加广泛 好歹是脚本语言
上学期上课也学到Python爬虫 但长久没使用 好多都忘了 (笑

扯远了

Java中 若要实现爬虫 可用HttpClient和Jsoup 这两个是一对
其它Java的爬虫框架大部分都是底层以此为基础进行封装的 例如WebMagic

HttpClient:抓取数据

在浏览器中 一直以来都是使用HTTP协议访问互联网的网页
网络爬虫需要编写程序 同样使用HTTP协议访问网页
那么 可以使用Java的HTTP协议客户端HttpClient这个技术来实现抓取网页数据

引入依赖:

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.2</version>
</dependency>

Jsoup:解析数据

在抓取到页面后 页面是一大段的HTML代码 因此还需要对页面进行解析
可以使用字符串处理工具解析页面 也可使用正则表达式 但是这些方法都会带来很大的开发成本
因此需要使用一款专门解析HTML页面的技术 由此 就有了Jsoup

Jsoup是一款Java的HTML解析器 可直接解析某个URL地址或HTML文本内容
提供了一套非常省力的API 可通过DOM CSS以及类似于JQuery的操作方法来取出数据和操作数据

主要功能:

  • 1、从一个URL 文件或字符串中解析HTML
  • 2、使用DOM或CSS选择器查找或取出数据
  • 3、操作HTML元素 属性 文本

引入依赖:

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

<!--封装好的工具类(需要用到里面的fileUtils类)-->
<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
 </dependency>

<!--封装好的工具类(需要用到里面的StringUtils类)-->
<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.7</version>
</dependency>

★虽然 使用Jsoup也可以替代HttpClient来直接发起请求解析数据 但往往不会这么用
因为在实际的爬虫开发过程中 需要使用到多线程 连接池 代理等方式
Jsoup对这些的支持并不是很好 因此一般仅仅把Jsoup作为Html解析工具使用

三、使用

1、HttpClient

✧、基本操作✧
  • 1、创建HttpClient对象:模拟打开浏览器
CloseableHttpClient httpClient = HttpClients.createDefault();
  • 2、创建HttpGet对象:模拟输入网址 发起get请求
HttpGet httpGet=new HttpGet("http://www.baidu.com");
  • 3、使用HttpClient对象发起请求:模拟按下回车 发起请求 返回响应
CloseableHttpResponse response = httpClient.execute(httpGet);
  • 4、解析响应 获取数据
// 判断状态码是否为200
if (response.getStatusLine().getStatusCode()==200)
{
   
	HttpEntity httpEntity = response.getEntity();
	String data=EntityUtils.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值