使用Httpclient和Jsoup 爬取网页信息

1.httpclient与jsoup简介

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。

httpclient功能有:
1.实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
2.支持自动转向
3.支持 HTTPS 协议
4.支持代理服务器等

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

jsoup功能有:

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

2.httpclient和jsoup共同使用

httpClient 属于专业的抓取网页的库,可以设置代理,抓取失败可以重试抓取。jsoup也可以直接抓取网页,但是在抓取上,jsoup比较弱,API简单,功能也简单,主要是扩展htmlparser的功能吧,解析html。测试过程中jsoup抓取页面经常报错(time out等等)。所以使用httpclient抓取网页,然后使用jsoup解析html。

3.maven依赖

httpclient:

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>

jsoup:

1
2
3
4
5
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>

4.使用httpclient抓取网页步骤

1.创建httpclient对象
2.创建请求对象,如果是get请求就创建 Httpget,如果是post就创建 HttpPost,并且参数传url地址字符串
3.发送请求,使用 httpClient 的 execute 方法发送,参数传请求对象,返回一个 HttpResponse 对象
4.获得页面内容,调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容
5.释放连接,无论执行方法是否成功,都必须释放连接