[swift] Swift Moya에서 HTML 파싱하기

Swift Moya는 네트워킹 라이브러리로서 HTML과 같은 웹 콘텐츠를 가져오고 파싱하는 데 매우 편리한 기능을 제공합니다. 이번 블로그 포스트에서는 Swift Moya를 사용하여 HTML을 파싱하는 방법을 알아보겠습니다.

1. 필요한 라이브러리 설치

Swift Moya를 사용하기 위해서는 Cocoapods를 이용하여 Moya를 프로젝트에 추가해야 합니다. Podfile에 다음과 같이 Moya를 추가해주세요.

pod 'Moya'

그리고 다음 명령어로 Cocoapods를 업데이트하고 의존성을 설치해주세요.

$ pod install

2. HTML 파싱하기

Swift Moya를 사용하여 HTML을 가져오고 파싱하기 위해서는 Moya의 MoyaProvider를 사용해야 합니다. 이를 위해 다음과 같이 Provider를 생성합니다.

import Moya

let provider = MoyaProvider<SomeTarget>()

SomeTarget은 HTML을 가져올 대상 URL을 나타내는 타겟입니다.

enum SomeTarget {
    case html
}

extension SomeTarget: TargetType {
    var baseURL: URL {
        return URL(string: "https://example.com")!
    }

    var path: String {
        return "/somePage"
    }

    var method: Moya.Method {
        return .get
    }

    var sampleData: Data {
        return Data()
    }

    var task: Task {
        return .requestPlain
    }

    var headers: [String: String]? {
        return nil
    }
}

위의 코드에서 baseURL, path, method 등을 실제 상황에 맞게 설정해주세요.

이제 provider를 사용하여 HTML을 가져올 수 있습니다.

provider.request(.html) { result in
    switch result {
    case let .success(response):
        let htmlString = String(data: response.data, encoding: .utf8)
        // HTML 파싱을 진행합니다.
    case let .failure(error):
        // 오류 처리
    }
}

위의 코드에서 response.data는 가져온 HTML 데이터를 나타냅니다. 이를 사용해서 HTML 파싱을 진행할 수 있습니다.

3. HTML 파싱하기 예제

HTML 파싱을 위해 SwiftSoup 라이브러리를 사용할 수 있습니다. 이 라이브러리는 Swift로 작성된 HTML 파싱 라이브러리로서 매우 직관적이고 사용하기 쉽습니다.

먼저, Podfile에 SwiftSoup를 추가합니다.

pod 'SwiftSoup'

그리고 다음 명령어로 Cocoapods를 업데이트하고 의존성을 설치합니다.

$ pod install

이제 SwiftSoup를 사용하여 HTML 파싱을 할 수 있습니다. 다음은 HTML에서 모든 링크를 추출하는 예제입니다.

import SwiftSoup

if let html = htmlString {
    do {
        let doc = try SwiftSoup.parse(html)
        let links = try doc.select("a")
        for link in links {
            let linkHref = try link.attr("href")
            print(linkHref)
        }
    } catch {
        print("HTML 파싱 오류: \(error)")
    }
}

htmlString에는 이전 단계에서 가져온 HTML 데이터가 있어야 합니다. doc.select("a")를 사용하여 모든 a 태그를 선택한 후, 각 링크의 href 속성 값을 추출합니다.

위의 코드 예제를 참고하여 HTML 파싱을 원하는 방식으로 구현해보세요.

참고 자료