1. Товары
  2.   HTML
  3.   Swift
  4.   Kanna
 
  

Бесплатная 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")
    }
}


 Русский