[swift] SwiftSoup에서 XPath를 사용하여 웹페이지를 탐색하는 방법은?

이번 포스트에서는 SwiftSoup라이브러리를 사용하여 XPath를 이용해 웹페이지를 탐색하는 방법에 대해 알아보겠습니다. SwiftSoup은 Java의 Jsoup 라이브러리의 Swift 포트로, 웹 스크래핑과 HTML 파싱을 위해 사용됩니다.

SwiftSoup 설치

SwiftSoup를 사용하기 위해서는 먼저 Swift 패키지 매니저(Swift Package Manager)를 사용하여 프로젝트에 SwiftSoup를 추가해야 합니다. 이를 위해 프로젝트 폴더에서 Package.swift 파일을 열고 다음 코드를 추가합니다:

dependencies: [
    ...
    .package(url: "https://github.com/scinfu/SwiftSoup.git", from: "1.7.5")
]

그리고 다음 명령어를 실행하여 종속성을 설치합니다:

swift package resolve

이제 SwiftSoup가 프로젝트에 추가되었습니다!

XPath로 웹페이지 탐색하기

이제 SwiftSoup를 사용하여 XPath를 이용해 웹페이지를 탐색할 수 있습니다. 먼저, SwiftSoup를 임포트하고 HTML 문자열을 파싱하여 Document 객체를 생성해야 합니다. 다음은 간단한 예제 코드입니다:

import SwiftSoup

let html = """
<html>
<body>
<h1>Hello, SwiftSoup!</h1>
<div>
    <p>This is a paragraph.</p>
    <p class="highlight">This is another paragraph with class "highlight".</p>
</div>
<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
</body>
</html>
"""

do {
    let doc: Document = try SwiftSoup.parse(html)
    
    // XPath로 요소 선택하기
    let elements = try doc.select("//p")
    
    for element in elements {
        print(try element.text())
    }
} catch {
    print("Error parsing HTML: \(error)")
}

위의 코드에서는 SwiftSoup를 사용하여 HTML 문자열을 파싱하고, XPath를 사용하여 모든 <p> 요소를 선택한 후 텍스트를 출력합니다. 결과는 다음과 같습니다:

This is a paragraph.
This is another paragraph with class "highlight".

XPath 쿼리 문자열은 //p로 작성되었는데, 이는 모든 <p> 요소를 선택하라는 의미입니다. XPath를 적용하는 다양한 방법에 대해서는 XPath 문서를 참조하시기 바랍니다.

결론

이번 포스트에서는 SwiftSoup를 사용하여 XPath를 이용해 웹페이지를 탐색하는 방법에 대해 알아보았습니다. SwiftSoup는 HTML 파싱과 웹 스크래핑 작업을 Swift로 손쉽게 수행할 수 있게 해줍니다. SwiftSoup의 다른 기능과 사용법에 대해서는 공식 문서를 참조하시기 바랍니다. Happy coding!