Java 爬虫系列丨(二)JDK 原生 API

it2025-02-08  7


1. URL 类

1.1 简介

Java 在 java.net 包中定义了 URL 类,该类用来处理有关 URL 的内容。

java.net.URL 提供了丰富的URL构建方式,并可以通过 java.net.URL 来获取资源。

1.2 构造方法

1.3 常用方法

参考资料:菜鸟教程


2. URL 发送 GET 请求爬取网页信息

下面用一段简单的程序来示范用 URL 类来发送 GET 请求从而爬取网页信息:

@Test public void testGet() throws IOException { //1. 确定要访问/爬取的URL URL url = new URL("https://baidu.com?username=xx&password=pwd"); //2. 获取连接对象 HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); //3. 设置连接相关信息,如请求方式、请求参数、请求头 httpURLConnection.setRequestMethod("GET"); httpURLConnection.setRequestProperty("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"); httpURLConnection.setConnectTimeout(30000); //4. 获取数据 InputStream inputStream = httpURLConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; String html = ""; while ((line = bufferedReader.readLine()) != null){ html += line +"\n"; } System.out.println(html); //5. 关闭连接/资源 inputStream.close(); bufferedReader.close(); httpURLConnection.disconnect(); }

结果:

说明:

确定要访问/爬取的URL

首先要确定要访问的网站的地址。如果需要传参的话,需要在地址后面加上 ?key=value,多个参数的话用&隔开,如上:?key1=value1&key2=value2。

获取连接对象

设置连接相关信息,如请求方式、请求参数、请求头

这里我们是GET请求。

至于 User-Agent 这个属性,其实是请求头中的一个属性。我们可以随便打开一个网站,然后打开检查,查看本机的 User-Agent 对应的值,如下:

获取数据

我们的 URL 连接对象以流的形式将网页信息抓取过来,我们只需要对流进行解析、清洗、存储然后进行展示就可以了。

关闭连接、资源


3、 URL 发送 POST 请求爬取网页信息

下面用一段简单的程序来示范用 URL 类来发送 POST 请求从而爬取网页信息:

@Test public void testPost() throws Exception{ //1. 确定 url URL url = new URL("http://www.itcast.cn"); //2. 获取连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //3. 设置连接信息 connection.setDoOutput(true); //允许向 Url 输出内容 connection.setRequestMethod("POST"); connection.setRequestProperty("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"); connection.setConnectTimeout(30000); OutputStream outputStream = connection.getOutputStream(); outputStream.write("username=xx".getBytes()); //4. 获取数据 InputStream inputStream = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; String html = ""; while ((line = bufferedReader.readLine()) != null){ html += line + "\n"; } System.out.println(html); //5. 关闭资源 outputStream.close(); inputStream.close(); connection.disconnect(); }

结果:

说明:

允许向 Url 输出内容

与 GET 请求不同的是 POST 请求允许我们向服务器发送更多的信息,它不是将数据放在路径上面,而且放在请求体里面。我们需要先用 setDoOutput(true) 来允许我们的连接对象向 Url 输出内容。

请求体

我们如何将要传递的信息封装到请求体中?这里需要用到 OutputStream 对象,我们可以从连接对象中获取 OutputStream 对象,然后向这个对象 write 一些信息。

最新回复(0)