Darmowa biblioteka Swift do parsowania i manipulacji danymi HTML
Otwarta biblioteka Swift do parsowania HTML/XML, która zapewnia czyste API Swift do łatwego parsowania i przeglądania dokumentów HTML i XML.
Czym jest Kanna?
Jeśli kiedykolwiek tworzyłeś aplikację Swift, która musi wyodrębniać dane ze stron internetowych, parsować odpowiedzi API w formacie XML lub zbierać ustrukturyzowaną treść, prawdopodobnie natknąłeś się na problem pracy z surowymi ciągami HTML i XML. Standardowa biblioteka Swift nie zawiera natywnego, ergonomicznego parsera dla tych formatów, co sprawia, że Kanna wkracza, aby uratować sytuację. W swojej istocie Kanna oferuje czyste API Swift do parsowania i przeglądania dokumentów HTML i XML. W tle deleguje ciężką pracę do libxml2, co oznacza, że otrzymujesz solidną wydajność parsowania bez konieczności ponownego implementowania skomplikowanych reguł gramatycznych.
Kanna wyróżnia się w ekosystemie Swift swoją prostotą i mocą. Dzięki intuicyjnemu API możesz nawigować i manipulować dokumentami HTML/XML, używając znanych metod zapytań, takich jak XPath 1.0 i selektory CSS3. Niezależnie od tego, czy tworzysz scraper internetowy, wyciągasz dane z kanałów RSS, czy przetwarzasz pliki konfiguracyjne XML, Kanna dostarcza niezbędne narzędzia. Obsługa wielu platform to jedna z najbardziej atrakcyjnych cech Kanny. Działa na macOS, iOS, tvOS, watchOS, a nawet na Linuxie. XPath 1.0 i selektory CSS3 dają dwie potężne, branżowe metody zapytań do dokumentów. Jej podwójne wsparcie zarówno dla selektorów CSS3, jak i XPath 1.0 sprawia, że jest na tyle elastyczna, aby obsłużyć wszystko, od prostego wyciągania HTML po złożone przetwarzanie XML z przestrzeniami nazw. Niezależnie od tego, czy budujesz aplikację iOS konsumującą kanał RSS, serwer Vapor, który skrapuje ceny konkurencji, czy narzędzie wiersza poleceń przekształcające dane XML, Kanna zapewnia narzędzia potrzebne do wykonania zadania niezawodnie i elegancko.
Rozpoczęcie pracy z Kanna
Zalecanym i najprostszym sposobem instalacji Kanna jest użycie CocoaPods. Proszę użyć następującego polecenia, aby przeprowadzić płynną instalację.
Zainstaluj Kanna przez Carthage
// add the following line to your Podfile:
use_frameworks!
pod 'Kanna', '~> 5.2.2'
// Then run:
$ pod install
Zainstaluj Kanna przez CocoaPods
// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2
Możesz również zainstalować ją ręcznie; pobierz najnowsze pliki wydania bezpośrednio z repozytorium GitHub.
Parsowanie dokumentów HTML w Swift
Biblioteka open source Kanna zawiera wsparcie dla ładowania i parsowania dokumentów HTML w aplikacjach Swift. Najczęstszym przypadkiem użycia tego parsowania HTML jest zarówno pobieranie go z sieci, jak i tworzenie programowo. Oto prosty przykład, który pokazuje, jak programiści mogą używać funkcji HTML przyjmującej surowy ciąg HTML, kodować go i zwracać obiekt dokumentu zawierający właściwości takie jak .title i .body, które zapewniają szybki dostęp do typowych elementów bez konieczności używania selektora.
Jak parsować HTML używając kodowania UTF-8 za pomocą biblioteki Swift?
import Kanna
// A sample HTML string representing a webpage
let htmlString = """
My Tech Blog
Witamy w Swift Parsing
Kanna sprawia, że parsowanie HTML jest proste i eleganckie.
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")
}
Obsługa zapytań selektorów CSS3
Biblioteka Kanna zawiera pełne wsparcie dla selektorów CSS3, co umożliwia programistom używanie znanej składni CSS do znajdowania elementów. Obsługa selektorów CSS w Kanna pozwala używać tej samej składni selektora, którą można napisać w arkuszu stylów lub w metodzie querySelectorAll w JavaScript. Dzięki temu jest to bardzo intuicyjne dla osób pochodzących z środowiska web developmentu. Poniższy przykład pokazuje, jak użytkownicy mogą wybierać elementy HTML i iterować po wielu elementach w aplikacjach Swift.
Jak wybrać wiele elementów HTML i wyodrębnić z nich tekst za pomocą biblioteki Swift?
import Kanna
let htmlString = """
-
Książka Swift
$39.99
-
Przewodnik Xcode
$24.99
-
Podstawy 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)")
}
}
Obsługa zapytań XPath 1.0
Biblioteka Kanna zawiera wsparcie dla zapytań XPath 1.0 w aplikacjach Swift. XPath zapewnia bardziej potężny i elastyczny sposób na nawigację po elementach i atrybutach w dokumencie XML/HTML. Jest szczególnie przydatny w przypadku złożonych struktur dokumentów. Wyrażenia XPath mogą przeglądać dokumenty w sposób, którego nie umożliwiają selektory CSS, na przykład znajdując elementy na podstawie ich pozycji, relacji rodzic-dziecko lub skomplikowanego dopasowywania tekstu. Jest niezbędny do parsowania XML i zaawansowanego scrapowania HTML.
Parsowanie i walidacja XML w Swift
Poza podstawowym parsowaniem HTML, otwarto‑źródłowa biblioteka Kanna oferuje solidne możliwości obsługi XML. Obejmuje to prawidłową walidację struktury XML oraz zarządzanie atrybutami. Pracując z danymi strukturalnymi, potrzebujesz więcej niż tylko wyodrębnianie elementów. Kanna zapewnia pełny dostęp do dokumentu XML, w tym komentarze, instrukcje przetwarzania i metadane dokumentu.
Jak wykonać parsowanie XML w aplikacjach 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")
}
}