1. 제품
  2.   HTML
  3.   Swift
  4.   Kanna
 
  

HTML 데이터를 파싱하고 조작하기 위한 무료 Swift 라이브러리

HTML/XML 파싱을 위한 오픈 소스 Swift 라이브러리로, HTML 및 XML 문서를 손쉽게 파싱하고 탐색할 수 있는 깔끔한 Swift API를 제공합니다.

Kanna란 무엇인가요?

웹 페이지에서 데이터를 추출하거나 XML 형태의 API 응답을 파싱하거나 구조화된 콘텐츠를 스크랩해야 하는 Swift 애플리케이션을 만든 적이 있다면, 원시 HTML 및 XML 문자열을 다루는 어려움에 직면했을 가능성이 높습니다. Swift 표준 라이브러리에는 이러한 형식을 위한 기본적이고 사용하기 편한 파서가 포함되어 있지 않으며, 바로 그때 Kanna가 문제를 해결해 줍니다. Kanna는 핵심적으로 HTML 및 XML 문서를 파싱하고 탐색하기 위한 깔끔한 Swift API를 제공합니다. 내부적으로는 무거운 작업을 libxml2에 위임하므로 복잡한 문법 규칙을 직접 구현하지 않아도 견고한 파싱 성능을 얻을 수 있습니다.

Kanna는 그 단순함과 강력함으로 Swift 생태계에서 돋보입니다. 직관적인 API를 통해 XPath 1.0 및 CSS3 선택자와 같은 익숙한 쿼리 방식을 사용하여 HTML/XML 문서를 탐색하고 조작할 수 있습니다. 웹 스크래퍼를 만들든, RSS 피드에서 데이터를 추출하든, XML 구성 파일을 처리하든, Kanna는 필요한 도구를 제공합니다. 크로스 플랫폼 지원은 Kanna의 가장 매력적인 특성 중 하나입니다. macOS, iOS, tvOS, watchOS, 그리고 심지어 Linux에서도 실행됩니다. XPath 1.0과 CSS3 선택자는 문서를 쿼리하는 두 가지 강력하고 업계 표준 방식을 제공합니다. CSS3 선택자와 XPath 1.0을 모두 지원하는 듀얼 지원 덕분에 단순 HTML 추출부터 복잡한 네임스페이스 XML 처리까지 유연하게 다룰 수 있습니다. RSS 피드를 소비하는 iOS 앱을 구축하든, 경쟁사 가격을 스크래핑하는 Vapor 서버를 만들든, XML 데이터를 변환하는 커맨드 라인 도구를 만들든, Kanna는 작업을 신뢰성 있게 우아하게 수행할 수 있는 도구를 제공합니다.

Previous Next

Kanna 시작하기

Kanna를 설치하는 권장되고 가장 쉬운 방법은 CocoaPods를 사용하는 것입니다. 원활한 설치를 위해 다음 명령을 사용하십시오.

Carthage를 통해 Kanna 설치

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

// Then run:
$ pod install

CocoaPods를 통해 Kanna 설치


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

수동으로도 설치할 수 있습니다; 최신 릴리스 파일을 GitHub 저장소에서 직접 다운로드하십시오.

Swift를 사용한 HTML 문서 파싱

오픈 소스 Kanna 라이브러리는 Swift 애플리케이션 내에서 HTML 문서를 로드하고 파싱하는 지원을 포함하고 있습니다. 웹에서 다운로드하거나 프로그래밍 방식으로 생성된 HTML을 파싱하는 가장 일반적인 사용 사례입니다. 다음은 소프트웨어 개발자가 원시 HTML 문자열을 받아 인코딩하고 .title 및 .body와 같은 속성을 포함하는 문서 객체를 반환하는 HTML 함수를 어떻게 사용할 수 있는지 보여주는 간단한 예시입니다. 이 객체를 통해 선택자가 필요 없이 일반 요소에 빠르게 접근할 수 있습니다.

Swift 라이브러리를 사용하여 UTF-8 인코딩으로 HTML을 파싱하는 방법은?

 import Kanna

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

  
    My Tech Blog
  
  
    

Swift 파싱에 오신 것을 환영합니다

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 선택자에 대한 완전한 지원을 포함하고 있어 개발자가 익숙한 CSS 구문을 사용해 요소를 찾을 수 있습니다. Kanna의 CSS 선택자 지원을 통해 스타일시트나 JavaScript의 querySelectorAll에 쓸 수 있는 동일한 선택자 구문을 사용할 수 있습니다. 이는 웹 개발 배경을 가진 사람들에게 매우 직관적입니다. 다음 예제는 사용자가 HTML 요소를 선택하고 Swift 애플리케이션 내에서 여러 요소를 반복하는 방법을 보여줍니다.

Swift 라이브러리를 사용하여 여러 HTML 요소를 선택하고 텍스트를 추출하는 방법은?

import Kanna

let htmlString = """


  
  • 스위프트 책 $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 라이브러리는 Swift 앱 내에서 XPath 1.0 쿼리를 지원합니다. XPath는 XML/HTML 문서의 요소와 속성을 탐색하는 보다 강력하고 유연한 방법을 제공합니다. 특히 복잡한 문서 구조에 유용합니다. XPath 표현식은 CSS 선택자가 할 수 없는 방식으로, 예를 들어 요소의 위치, 부모-자식 관계, 복잡한 텍스트 매칭을 기반으로 요소를 찾는 등 문서를 탐색할 수 있습니다. 이는 XML 파싱 및 복잡한 HTML 스크래핑에 필수적입니다.

Swift를 사용한 XML 파싱 및 검증

기본 HTML 파싱을 넘어, 오픈 소스 Kanna 라이브러리는 강력한 XML 처리 기능을 제공합니다. 여기에는 올바른 XML 구조 검증 및 속성 관리가 포함됩니다. 구조화된 데이터를 다룰 때는 요소 추출만으로는 충분하지 않습니다. Kanna는 주석, 처리 명령, 문서 메타데이터 등을 포함한 전체 XML 문서 접근을 제공합니다.

Swift 앱에서 XML 파싱을 수행하는 방법은?

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")
    }
}


 한국인