Безкоштовна Swift бібліотека для парсингу та маніпулювання HTML даними

Відкрита Swift бібліотека для парсингу HTML/XML, яка надає чистий Swift API для легкого парсингу та обходу HTML та XML документів.

Що таке Kanna?

Якщо ви коли‑небудь створювали Swift‑додаток, який потребує витягати дані зі веб‑сторінок, парсити відповіді API у форматі XML або збирати структурований контент, ви, ймовірно, стикалися з проблемою роботи з необробленими рядками HTML та XML. Стандартна бібліотека Swift не містить вбудованого, зручного парсера для цих форматів, і саме тут Kanna приходить на допомогу. По суті, Kanna надає чистий Swift API для парсингу та обходу HTML і XML документів. Під капотом вона делегує важку роботу libxml2, що означає, що ви отримуєте надміцну продуктивність парсингу без необхідності повторно реалізовувати складні граматичні правила.

Kanna виділяється в екосистемі Swift своєю простотою та потужністю. Завдяки інтуїтивному API ви можете навігувати та маніпулювати HTML/XML‑документами, використовуючи знайомі методи запитів, такі як XPath 1.0 та CSS3‑селектори. Незалежно від того, чи створюєте ви веб‑скрепер, витягуєте дані з RSS‑стрічок або обробляєте XML‑файли конфігурації, Kanna надає необхідні інструменти. Підтримка крос‑платформенності — одна з найпривабливіших рис Kanna. Вона працює на macOS, iOS, tvOS, watchOS та навіть Linux. XPath 1.0 і CSS3‑селектори дають вам два потужних, галузевих стандартних способи запиту документів. Подвійна підтримка як CSS3‑селекторів, так і XPath 1.0 робить її достатньо гнучкою для роботи як із простим витягом HTML, так і зі складною, просторово‑іменованою обробкою XML. Незалежно від того, чи створюєте ви iOS‑додаток, що споживає RSS‑стрічку, сервер Vapor, який сканує ціни конкурентів, або інструмент командного рядка, що трансформує XML‑дані, Kanna надає інструменти для надійного та елегантного виконання завдання.

Previous Next

Початок роботи з Kanna

Рекомендований і найпростіший спосіб встановити Kanna — використання CocoaPods. Будь ласка, використайте наступну команду для плавної інсталяції.

Встановити Kanna через Carthage

// add the following line to your Podfile:
use_frameworks! 
pod 'Kanna', '~> 5.2.2'

// Then run:
$ pod install

Встановити Kanna через CocoaPods


// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2

Ви також можете встановити його вручну; завантажте останні файли релізу безпосередньо з репозиторію GitHub.

Парсинг HTML-документів за допомогою Swift

Бібліотека з відкритим кодом Kanna включає підтримку завантаження та парсингу HTML‑документів у Swift‑додатках. Найпоширеніший випадок використання — це парсинг HTML, незалежно від того, чи завантажений він з інтернету, чи створений програмно. Ось простий приклад, який показує, як розробники можуть використовувати функцію HTML, що приймає необроблений рядок HTML, кодує його та повертає об’єкт документа, що містить властивості, такі як .title і .body, які забезпечують швидкий доступ до загальних елементів без необхідності використання селектора.

Як розпарсити HTML з використанням кодування UTF-8 за допомогою Swift бібліотеки?

 import Kanna

// A sample HTML string representing a webpage
let htmlString = """

  
    My Tech Blog
  
  
    

Ласкаво просимо до Swift Parsing

Kanna робить парсинг HTML простим і елегантним.

View on GitHub """ // Parse the HTML string using UTF-8 encoding if let doc = try? HTML(html: htmlString, encoding: .utf8) { // Access the document title directly via a convenience property print(doc.title ?? "No title found") // Output: My Tech Blog // Access the full body text print(doc.body?.text ?? "No body") }

Підтримка запитів CSS3 селекторів

Бібліотека Kanna включила повну підтримку CSS3 Selector, що дозволяє розробникам використовувати знайомий синтаксис CSS для пошуку елементів. Підтримка CSS‑селекторів у Kanna дозволяє використовувати той самий синтаксис селекторів, який ви могли б написати у таблиці стилів або в JavaScript‑методі querySelectorAll. Це робить її дуже інтуїтивною для будь‑якого, хто має досвід веб‑розробки. Нижче наведено приклад, який показує, як користувачі можуть вибирати HTML‑елементи та ітерувати кілька елементів у Swift‑додатках.

Як вибрати кілька HTML-елементів та витягнути з них текст за допомогою Swift бібліотеки?

import Kanna

let htmlString = """


  
  • Книга Swift $39.99
  • Посібник Xcode $24.99
  • Основи iOS $49.99
""" if let doc = try? HTML(html: htmlString, encoding: .utf8) { // Select all elements with class "product" inside a "ul" for product in doc.css("ul.product-list li.product") { // Extract text from nested span elements using child selectors let name = product.css("span.name").first?.text ?? "Unknown" let price = product.css("span.price").first?.text ?? "N/A" // Access HTML attributes using subscript notation let productId = product["data-id"] ?? "No ID" print("[\(productId)] \(name) — \(price)") } }

Підтримка запитів XPath 1.0

Бібліотека Kanna включає підтримку запитів XPath 1.0 у Swift‑додатках. XPath забезпечує більш потужний і гнучкий спосіб навігації по елементах і атрибутах у XML/HTML‑документі. Це особливо корисно для складних структур документів. Вирази XPath можуть проходити документи способами, недоступними для CSS‑селекторів, наприклад, знаходити елементи за їх позицією, взаємозв’язками батько‑дитина або складним текстовим збігом. Це незамінно для парсингу XML та складного скрапінгу HTML.

Парсинг та валідація XML за допомогою Swift

Поза базовим парсингом HTML, бібліотека з відкритим кодом Kanna пропонує потужні можливості обробки XML. Це включає правильну валідацію структури XML та управління атрибутами. Працюючи зі структурованими даними, вам потрібно більше, ніж просто витяг елементів. Kanna забезпечує повний доступ до XML‑документу, включаючи коментарі, інструкції обробки та метадані документа.

Як виконати парсинг XML у Swift-додатках?

import Kanna

let xmlString = """


  
    Swift Developer News
    
      Kanna 6.0 Released with Swift 6 Support
      Alex Johnson
      Mon, 26 Jun 2024 00:00:00 GMT
    
    
      New Features in Swift 5.10
      Maria Garcia
      Tue, 15 Apr 2024 00:00:00 GMT
    
  

"""

if let doc = try? Kanna.XML(xml: xmlString, encoding: .utf8) {
    
    // Define a namespace mapping: prefix -> URI
    // The prefix you use here ("dc") can be anything; it maps to the namespace URI
    let namespaces = [
        "dc": "http://purl.org/dc/elements/1.1/"
    ]
    
    // Query elements in the "dc" namespace using the prefix
    for item in doc.xpath("//item", namespaces: namespaces) {
        let title = item.at_xpath("title")?.text ?? "No title"
        let creator = item.at_xpath("dc:creator", namespaces: namespaces)?.text ?? "Unknown"
        let pubDate = item.at_xpath("pubDate")?.text ?? "No date"
        
        print("Title: \(title)")
        print("Author: \(creator)")
        print("Published: \(pubDate)\n")
    }
}


 Українська