用Java下载网页

2023/06/01

1. 概述

在某些应用程序中,我们可能需要从互联网上下载一个网页并将其内容提取为字符串。一个流行的用例是网络抓取或内容解析。

在本教程中,我们将使用Jsoup和HttpURLConnection下载示例网页。

2. 使用HttpURLConnection下载网页

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

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

@Test
void givenURLConnection_whenRetrieveWebpage_thenWebpageIsNotNullAndContainsHtmlTag() throws IOException {
    URLurl = 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以获取网页内容。

然后,我们创建一个新的BufferedReader和InputStreamReader实例来帮助从网页中读取数据。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.15.4</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上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章