1. 概述

在某些应用中,我们可能需要从互联网下载网页并提取其内容作为字符串。一个常见的应用场景是网络爬虫或内容解析。

在这个教程中,我们将使用JsoupHttpURLConnection来下载一个示例网页。

2. 使用HttpURLConnection下载网页

HttpURLConnectionURLConnection的一个子类。它有助于连接到统一资源定位器(URL),该URL使用HTTP作为其协议。这个类包含不同的方法来处理HTTP请求。

让我们使用HttpURLConnection下载一个示例网页

@Test
void givenURLConnection_whenRetrieveWebpage_thenWebpageIsNotNullAndContainsHtmlTag() throws IOException {
    
    URL url = new URL("https://example.com");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
        StringBuilder responseBuilder = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            responseBuilder.append(line);
        }
    
        assertNotNull(responseBuilder);
        assertTrue(responseBuilder.toString()
          .contains("<html>"));
    }
}

这里,我们创建一个URL对象,表示网页的地址。接着,我们创建一个HttpURLConnection实例,并在URL对象上调用openConnection()方法。这会打开与网页的连接。此外,我们将请求方法设置为GET以获取网页的内容。

然后,我们创建一个新的BufferedReaderInputStreamReader实例,以便从网页读取数据。InputStreamReader类帮助将原始字节转换为BufferedReader可以读取的字符。

最后,我们将网页转换为字符串,通过从BufferedReader读取并连接行。我们使用StringBuilder对象高效地连接行。

3. 使用Jsoup下载网页

Jsoup是一个流行的开源Java库,用于处理HTML。它有助于获取URL并提取其数据。它的主要优势之一是使用HTML DOM方法和CSS选择器从URL抓取HTML

要开始使用Jsoup,我们需要将其依赖项添加到我们的依赖管理器中。让我们将Jsoup的依赖项添加到pom.xml

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

以下是使用Jsoup下载网页的一个例子:

@Test
void givenJsoup_whenRetrievingWebpage_thenWebpageDocumentIsNotNullAndContainsHtmlTag() throws IOException {
        
    Document document = Jsoup.connect("https://www.example.com").get();
    String webpage = document.html();
        
    assertNotNull(webpage);
    assertTrue(webpage.contains("<html>"));
}

在这个示例中,我们创建一个Document实例,并使用Jsoup.connect()与样本站点建立连接。Jsoup.connect()有助于连接到URL并将其内容作为Document对象获取。

接下来,我们调用get()方法,向指定的URL发送GET请求。它返回响应作为Document

最后,我们将提取的内容存储为String类型的变量webpage。我们通过在Document对象上调用html()方法来实现这一点。

4. 总结

在这篇文章中,我们学习了两种在Java中下载网页的方法。我们使用了HttpURLConnection类和Jsoup来获取网页的内容。两者都可以使用,但Jsoup似乎更易于操作。

如往常一样,完整示例代码可以在GitHub上找到。