Library | Installation |
---|---|
SwiftSoup | |
Kanna | |
JI | |
HTMLKit | |
Fuzi | |
Hpple | - |
NDHpple | - |
HTML Guideline
Web에서 가져온 HTML 을 사용하기 위해서 Element가 어떤 것인지,
Attribute가 어떤 것인지 정도만 알면 된다.
Element : 여는 Tag
+ Content
+ 닫는 Tag
Tag로 둘러쌓인 내부 : Content
- Tag :
p
- Attribute :
class="editor-mode"
사실 데이터를 가져오는 것은 쉽다.
URLSession을 사용해서 HTML을 가져온다.
func getHTML() {
//MARK: 필요한 웹페이지의 URL 붙여넣는다.
let url = URL(string: "https://URL 붙여넣기")
let session = URLSession.shared
let dataTask = session.dataTask(with: url!) { data, response, error in
if error != nil {
print("URLSession ERRRO : ", error!)
return
}
guard let data = data, let response = response as? HTTPURLResponse, response.statusCode == 200 else {
return
}
print("URLSession Response Status Code", response.statusCode)
//MARK: HTML 가져옴
let html = String(data: data, encoding: .utf8)!
}
dataTask.resume()
}
SwiftSoup 사용
private func getDataUsingSwiftSoup(_ html: String){
do {
//MARK: 1. 먼저 document를 만들어야 하는데 SwiftSoup의 parse메서드에 가져온 html을 넣어준다.
let doc: Document = try SwiftSoup.parse(html)
//MARK: 2. SwiftSoup로 parse 한 doc를 select메서드를 사용해 경로를 넣어준다.
let firstElement: Elements = try doc.select("div.css-1r6553s")
let secondElement: Elements = try firstElement.select("div.css-lwlrzb")
let nameElements: Elements = try secondElement.select("div > h4 > span")
for (index, nameElement) in nameElements.enumerated() {
print(index, terminator: " ")
print(try nameElement.text())
}
let positionElements: Elements = try secondDivergingPoint.select("div.css-gbfsct").select("div > span")
var positionData = [String]()
for (index, positionElement) in positionElements.enumerated() {
print(index, terminator: " ")
positionData.append(try positionElement.text())
print(try positionElement.text())
}
// 불필요한 데이터가 들어 올 수 있기 때문에 확인해야 한다.
// 불필요한 데이터 삭제
for i in [5, 7, 9, 16, 17, 34, 35, 43].reversed() {
positionData.remove(at: i)
}
//MARK: ImageLink 가져오기
let imageElements: Elements = try firstDivergingPoint.select("div.css-1ts4rwa > div > div > div > div > div > div > div").select("img")
for (index, elementValue) in imageElements.enumerated() {
print(index, terminator: " ")
print(try elementValue.attr("src".description))
yagomDatas[index].imageLink = try elementValue.attr("src".description)
}
} catch {
print(error.localizedDescription)
}
}