Nemokama Swift biblioteka HTML duomenų analizei ir manipuliavimui
Atviro kodo HTML/XML analizės Swift biblioteka, kuri suteikia švarią Swift API HTML ir XML dokumentų analizei bei naršymui su lengvumu.
Kas yra Kanna?
Jei kada nors kūrėte Swift programą, kuri turi išgauti duomenis iš tinklalapių, analizuoti API atsakymus XML formatu arba išgauti struktūruotą turinį, greičiausiai susidūrėte su iššūkiu dirbant su neapdorotomis HTML ir XML eilutėmis. Swift standartinė biblioteka neapima natūralaus, ergonomiško šių formatų analizatoriaus, todėl čia į pagalbą įsijungia Kanna. Jos pagrindas – švari Swift API HTML ir XML dokumentų analizavimui ir naršymui. Viduje ji perduoda sunkiąją dalį libxml2, o tai reiškia, kad gausite patikimą analizės našumą be būtinybės patiems įgyvendinti sudėtingas gramatikos taisykles.
Kanna išsiskiria Swift ekosistemoje dėl savo paprastumo ir galios. Su intuityvia API galite naršyti ir manipuliuoti HTML/XML dokumentais naudodami pažįstamus užklausų metodus, tokius kaip XPath 1.0 ir CSS3 selektoriai. Nesvarbu, ar kuriate interneto skreperį, išgaunate duomenis iš RSS kanalų, ar apdorojate XML konfigūracijos failus, Kanna suteikia jums reikalingus įrankius. Kryžminės platformos palaikymas yra viena iš Kanna patraukliausių savybių. Ji veikia macOS, iOS, tvOS, watchOS ir net Linux. XPath 1.0 ir CSS3 selektoriai suteikia du galingus, pramonės standartų būdus užklausoms dokumentams. Jos dvilypis palaikymas tiek CSS3 selektoriams, tiek XPath 1.0 daro ją pakankamai lanksti, kad galėtų tvarkyti viską nuo paprasto HTML išgavimo iki sudėtingo, vardų erdvių turinčio XML apdorojimo. Nesvarbu, ar kuriate iOS programėlę, kuri naudoja RSS kanalą, Vapor serverį, kuris skreperiuja konkurentų kainas, ar komandų eilutės įrankį, transformuojantį XML duomenis, Kanna suteikia įrankius, leidžiančius patikimai ir elegantiškai atlikti darbą.
Pradžia su Kanna
Rekomenduojamas ir paprasčiausias būdas įdiegti Kanna yra naudojant CocoaPods. Prašome naudoti šią komandą sklandžiam įdiegimui.
Įdiekite Kanna per Carthage
// add the following line to your Podfile:
use_frameworks!
pod 'Kanna', '~> 5.2.2'
// Then run:
$ pod install
Įdiekite Kanna per CocoaPods
// If you prefer Carthage, add this line to your Cartfile:
github "tid-kijyun/Kanna" ~> 5.2.2
Taip pat galite įdiegti rankiniu būdu; atsisiųskite naujausius leidimo failus tiesiai iš GitHub saugyklos.
HTML dokumentų analizė naudojant Swift
Atviro kodo Kanna biblioteka įtraukė palaikymą HTML dokumentų įkėlimui ir analizavimui Swift programose. Dažniausiai naudojamas atvejis yra HTML analizavimas, nesvarbu, ar jis atsisiųstas iš interneto, ar sukurtas programiškai. Štai paprastas pavyzdys, kuris rodo, kaip programinės įrangos kūrėjai gali naudoti HTML funkciją, priimančią neapdorotą HTML eilutę, ją koduoti ir grąžinti dokumento objektą su savybėmis, tokiomis kaip .title ir .body, suteikiančias greitą prieigą prie dažnų elementų be selektoriaus poreikio.
Kaip išanalizuoti HTML naudojant UTF-8 koduotę per Swift biblioteką?
import Kanna
// A sample HTML string representing a webpage
let htmlString = """
My Tech Blog
Sveiki atvykę į Swift Parsing
Kanna daro HTML analizavimą paprastu ir elegantišku.
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 selektorių užklausų palaikymas
Kanna biblioteka įtraukė pilną CSS3 selektorių palaikymą, leidžiantį kūrėjams naudoti pažįstamą CSS sintaksę elementų paieškai. Kanna CSS selektorių palaikymas leidžia naudoti tą pačią selektoriaus sintaksę, kurią galėtumėte rašyti stiliaus lape arba JavaScript querySelectorAll funkcijoje. Tai daro ją labai intuityvią visiems, kilusiems iš web plėtros srities. Žemiau pateiktas pavyzdys rodo, kaip vartotojai gali pasirinkti HTML elementus ir iteruoti per kelis elementus Swift programose.
Kaip pasirinkti kelis HTML elementus ir išgauti iš jų tekstą per Swift biblioteką?
import Kanna
let htmlString = """
-
Swift knyga
$39.99
-
Xcode vadovas
$24.99
-
iOS pagrindai
$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 užklausų palaikymas
Kanna biblioteka įtraukė XPath 1.0 užklausų palaikymą Swift programose. XPath suteikia galingesnį ir lankstesnį būdą naršyti elementus ir atributus XML/HTML dokumente. Tai ypač naudinga sudėtingoms dokumentų struktūroms. XPath išraiškos gali pereiti dokumentus būdais, kurių CSS selektoriai negali, pavyzdžiui, rasti elementus pagal jų poziciją, tėvų‑vaikų santykius arba sudėtingą teksto atitikimą. Tai nepakeičiama XML analizės ir sudėtingo HTML rinkimo priemonė.
XML analizė ir validavimas naudojant Swift
Be paprasto HTML analizavimo, atviro kodo Kanna biblioteka siūlo patikimas XML tvarkymo galimybes. Tai apima tinkamą XML struktūros validavimą ir atributų valdymą. Dirbant su struktūrizuotais duomenimis, reikia daugiau nei tik elementų išgavimas. Kanna suteikia pilną XML dokumento prieigą, įskaitant komentarus, apdorojimo instrukcijas ir dokumento metaduomenis.
Kaip atlikti XML analizę Swift programose?
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")
}
}