[swift] Swift로 HTTP 요청에서 HTML 파싱하기

소개

이번 포스트에서는 Swift를 사용하여 HTTP 요청을 보내고, 받은 HTML 응답을 파싱하는 방법을 알아보겠습니다. HTML 파싱은 웹 스크래핑, 웹 크롤링, 데이터 마이닝 등 다양한 분야에서 유용하게 사용될 수 있습니다.

네트워크 요청 보내기

Swift에서 네트워크 요청을 보내기 위해 URLSession을 사용할 수 있습니다. 다음은 HTTP GET 요청을 보내는 예제입니다.

import Foundation

func sendRequest() {
    let url = URL(string: "https://www.example.com")
    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        if let error = error {
            print("Error: \(error)")
        } else if let data = data {
            let htmlString = String(data: data, encoding: .utf8)
            // 파싱을 위해 htmlString을 사용합니다.
        }
    }
    task.resume()
}

HTML 파싱하기

Swift에서 HTML을 파싱하기 위해서는 외부 라이브러리를 사용할 수도 있지만, 기본적인 파싱 작업은 NSAttributedString을 사용하여 수행할 수 있습니다. 다음은 HTML 문자열을 NSAttributedString으로 변환하는 예제입니다.

import Foundation
import UIKit

func parseHTML(htmlString: String) {
    guard let data = htmlString.data(using: .utf8) else {
        return
    }
    
    let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
        .documentType: NSAttributedString.DocumentType.html,
        .characterEncoding: String.Encoding.utf8.rawValue
    ]
    
    if let attributedString = try? NSMutableAttributedString(data: data, options: options, documentAttributes: nil) {
        // 파싱된 attributedString을 사용하여 필요한 작업을 수행합니다.
    }
}

다른 파싱 라이브러리 사용하기

Swift에는 HTML 파싱을 위한 다양한 라이브러리가 있습니다. 예를 들어, SwiftSoup은 Java의 Jsoup 라이브러리를 기반으로 한 Swift용 HTML 파싱 라이브러리입니다. 다음은 SwiftSoup을 사용하는 예제입니다.

import SwiftSoup

func parseHTML(htmlString: String) {
    do {
        let doc = try SwiftSoup.parse(htmlString)
        let elements = try doc.select("a")
        
        // 필요한 파싱 작업을 수행합니다.
    } catch let error {
        print("Error: \(error)")
    }
}

마무리

Swift를 사용하여 HTTP 요청에서 HTML을 파싱하는 방법을 살펴보았습니다. 이를 응용하여 웹 스크래핑이나 데이터 마이닝과 같은 작업을 수행할 수 있습니다. 다양한 라이브러리를 사용하여 좀 더 복잡한 HTML 파싱 작업을 수행할 수도 있으니, 필요에 따라 적합한 라이브러리를 선택하여 사용하면 됩니다.

참고 자료