Java爬虫——抓取静态网页

本文介绍了如何使用Java的HttpClient库抓取静态网页。主要步骤包括创建HttpClient对象,设置请求方法,添加请求参数,发送请求并接收响应,以及解析响应内容。特别提到,jsoup是强大的HTML解析工具,用于从网页中提取所需信息。提供了具体实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HttpClient vs HttpUrlConnection
抓取一张网页的内容,通常使用HttpClient 、HttpUrlConnection,首先查了下这两个类的区别:
java.net 包中提供了HttpURLConnection来访问 HTTP 协议,这个是java的标准类,什么都没封装,用起来太原始,不方便
Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。 由于做了很多封装,性能上要比HttpURLConnection差一些,但用着方便,这里就基于此类来实现爬虫。
二、获取一张静态网页的内容
     (1)org.apache.http.impl.client.CloseableHttpClient
它是一个抽象类,它实现了org.apahce.http.client.HttpClient接口(共有方法:多个execute()、getConnectionManager()、getParams())的execute()方法。我们知道抽象类是不能用new关键字建立实例的,只能被当作父类被其它子类继承。然后根据类的多态性,将拥有抽象类类型的引用变量指向它的子类对象,这样就可以使用抽象类中的普通方法以及在其子类中已重写的抽象方法。当然,还可以通过过渡工厂类可以更灵活的获取抽象类的实例       

     (2)使用HttpClient发送请求、接收响应的步骤           

           1. 创建HttpClient对象。

           2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请         求,创建HttpPost对象。

           3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参 数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

           4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

           5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用   HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

            6. 释放连接。无论执行方法是否成功,都必须释放连接。(关于释放连接,应该不是必须滴,我没处理也抓的好好地。。。)

三、 解析DOM文档

要获取一张网页中我们所需要的内容,就必须解析文档,jsoup就是一款公认的、迄今最强大的解析html的工具



             附上具体实现代码:(以此链接为例---https://detail.tmall.com/item.htm?spm=a222t.7794920.fdigt.15.toj3Lg&id=522169321891&skuId=3201261540546&rn=870e70c02239d3cf10b156e9f9aa9e4f&scm=search-api.3c_fp.870e70c02239d3cf10b156e9f9aa9e4f.2


              

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值