1. 概述
在某些应用中,我们可能需要从互联网下载网页并提取其内容作为字符串。一个常见的应用场景是网络爬虫或内容解析。
在这个教程中,我们将使用Jsoup和HttpURLConnection
来下载一个示例网页。
2. 使用HttpURLConnection
下载网页
HttpURLConnection
是URLConnection
的一个子类。它有助于连接到统一资源定位器(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以获取网页的内容。
然后,我们创建一个新的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.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上找到。