먼저 앞서서 이번 포스팅은 셀레니움이 아니다.
같은 크루중 한분이 질문한 내용이다.
크롤링 관련 질문인데...
본인이 처음 크롤링을 배울때 정확히 말하면 innerText만 알았을 때 속성값을 가져오는 것에 대해서 너무 애를 먹었던 적이 있다. 이분 역시 속성값을 가져오는것에 대해서 질문이 시작 되었다.
이 속성값을 가져오는 방법은 언어마다 약간식 다르지만 VBA에서는 getAttribute이다.
위 사진을 보면 현재 아이디 값이 page--game-detail 이고 가져와야 하는 값은 오른쪽 상단에 있는 date-game-price이다. 그렇다면 저 아이디를 선택자로 잡은 다음 date-game-price 의 값만 가져오면 된다.
Html.body.innerHTML = Http.responseText
strText = Html.getElementById("page--game-detail").getAttribute("data-game-price")
rngA(1, 6) = strText
하지만 이글을 보는 분들은 장기적으로 봤을 때는 QuerySeletor 문법을 이용하기 바란다. 이는 다시 이렇게 바꿀 수 있다.
Html.body.innerHTML = Http.responseText
strText = Html.QuerySelector("#page--game-detail").getAttribute("data-game-price")
rngA(1, 6) = strText
id 값이기 때문에 #이 사용된걸 확인바란다.
이렇게 했다면 정가인 39.99 를 가져오게 되었을 것이다.
물론 속성값에 data-game-id를 적었다면 4204719를 가져왔을 것이다.
자 다시 이 그림을 보도록 하자
질문하신 분은 PS+: 다음의 strong 태그를 감싸인 값을 가져오긴 원한다.
저기에 당일의 최저가로 변화는 듯 하다.
허나 만약 $0이라고 하면 [최저 가격 : ]인 $13.99값을 가져오길 바란다.
태그를 보면 알겠지만 간단하게 바로 위 태그를 가져와서 하기에는 태그 중복이 너무 많아서 힘이 들게 될것이다.
현재 가져오려는 값은
앞서 추출한 id값의 세번째 div태그 자식임을 알수 있기 때문에, 이렇게 querySelector를 사용할 수 있다.
pricetext = Html.querySelector("#page--game-detail:nth-child(3)").innerText
이렇게 하면 3번째 div 태그안에 있는 모든 innerText가 들어오게 될것이다.
너무 당황하지말고 잘 보게 되면 우리가 가져오고 싶은 값은 여러 텍스트 중에
PS+: 이후의 값이다.
자 그럼 우리가 텍스트를 모두 가져온 값을 변수 pricetext에 담았으니까.
그 값에서 PS+: 기준으로 한번 자르고, 다시 띄어쓰기로 나누면 우리가 원하는 값을 가져오게 된다.
처음 split를 하면 : 배열의 (1)번째
필요없는 내용 / 필요 있는내용
두번째 split를 하면 : 배열의 (0)번째
필요있는 내용 / 필요 없는 내용
이렇게 구문이 진행되면 우리가 원하는 값을 가져오게 된다.
pricetext = Html.querySelector("#page--game-detail:nth-child(3)").innerText
pricetext = Split(Split(pricetext, "PS+: ")(1), " ")(0)
rngA(1, 7) = pricetext
여기서 하나 더 나아가면 질문하신 분은 최저가가 $0이 아닐때는 [PS+: ]이후의 값을 원했지만 $0일 때는 [최저 가격: ] 이후 값을 원했기 때문에 조건문만 한번 더 쳐주면 된다.
pricetext = Html.querySelector("#page--game-detail:nth-child(3)").innerText
pricetext = Split(Split(pricetext, "PS+: ")(1), " ")(0)
If pricetext <> "$0" Then
rngA(1, 7) = pricetext
Else
pricetext = Split(Split(pricetext, "최저 가격: ")(1), " ")(0)
rngA(1, 7) = pricetext
End If
정리하면 오늘 포스팅은
1. 속성값을 가져오는 방법
2. 자식태그를 선택하는 방법
3. 마지막으로 이중 split으로 원하는 값을 가져오는 방법
이 3가지에 대해서 알아보았다. 마지막으로 console 창에 이를 실행하는 코드를 끝으로 포스팅을 마무리 하려고 한다.
'VBA > 엑사남_심화방' 카테고리의 다른 글
셀레니움 내가 원하는 폴더에 다운로드하기 (4) | 2024.10.13 |
---|---|
[심화방] VBA_심화_100제 #21 [ 서울시 상권분석 크롤링 ] (0) | 2024.03.12 |
[심화방] VBA_심화_100제 #20 [ 복잡한 노드 제어하기 ] (0) | 2023.07.27 |
[심화방] VBA_심화_100제 #19 [ 유튜브목록 가져오기] (0) | 2023.06.13 |
[심화방] VBA_심화_100제 #18 [ 유튜브댓글 조회하기] (0) | 2023.06.12 |
댓글