也許有一天您需要從應用程式中的網站或 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