也许有一天您需要从应用程序中的网站或 HTML 文档获取信息,我会毫不夸张地说,使用 jsoup 库将大大简化您的任务。 根据wiki,jsoup 是一个开源 Java 库,旨在解析、提取和操作 HTML 文档中存储的数据。
快速启动
该库可以作为 jar 文件下载并放置在项目中,或使用 Maven/Gradle 连接。我会在文章末尾留下一个官方网站的链接:在那里你可以找到该库的当前版本。在示例中,我们将通过 Maven 使用连接。让我们添加一个依赖项:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
用法
首先,您需要Document
从 org.jsoup.nodes.Document 获取该类的实例,指示解析的源。它可以是本地文件或链接。例如,在本文中,我们将使用网站 yandex.ru 并尝试获取他们当前的新闻源:
Document doc = Jsoup.connect("https://yandex.ru/")
.userAgent("Chrome/4.0.249.0 Safari/532.5")
.referrer("http://www.google.com")
.get();
User Agent
是传送到正在访问的站点的标识符。在许多网站上,它是反垃圾邮件过滤器最重要的标准。 Referrer
包含请求源的 URL。该方法get()
抛出一个已处理的 IOException,因此我们可以将所有内容包装在try/catch
一个块中,或者只是使用 进一步抛出它throws
。我们现在已经收到了该页面的源代码。如果需要,jsoup 库本身可以恢复损坏的元素。现在我们要做的就是将搜索范围缩小到一个单独的块。该方法select()
有多种用途:它允许您通过标签、属性、类和其他参数来搜索元素。几乎所有现代浏览器都支持快速搜索所选元素的源代码的功能。通过简单的操作,我们找到所需元素的源代码,并获得div
具有指定类的块,我们将使用它进行采样。 让我们使用 org.jsoup.select.Elements 中的类Elements
来选择所选块中的所有元素。
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
现在我们有这样的东西: 现在我们所要做的就是使用一个小循环来迭代所有元素:
for (Element element : listNews.select("a"))
System.out.println(element.text());
该方法text()
允许您丢弃标记代码,只为所有传入元素留下文本组合。执行结果如下: 很容易注意到,实际接收到的行数与页面上实际显示的行数并不对应。这就是陷阱所在。如果您查看标记的源代码,您会注意到最新新闻以特定时间间隔动态变化。其中一些“石头”可以通过额外的采样,当然还有测试来解决。可能结果是前五个元素将包含我们需要的信息,而第六个元素将仅包含脚本化的空行。块也可能没有任何标识符,那么可以使用方法直接指向get(int index)
相关元素的位置号。
System.out.println(listNews.select("a").get(2).text());
GO TO FULL VERSION