[VBA] 크롤링 Table 하위항목 ,에서 항목 가져오는 방법

VBA
작성자
최인섭
작성일
2021-12-21 09:38
조회
78
엑셀버전 : 엑셀2019

운영체제 : 윈도우10

크롤링 Table 하위항목 <thead>,<tbody>에서 <tbody>항목 가져오는 방법이 궁금합니다.

현재 Table에서 크롤링할 경우 첫번째 <thead>항목만 크롤링되고 있습니다.

질문 내용은 아래와 같습니다.

  1. <tbody>의 컨테이너 목록을 가져오고싶은데 방법이 없을까요?
  2. hBody라는 변수를 선언 후 Set hBody = hTable.Children(1)같이 hTable의 하위항목을 불러와서 크롤링했는데 아무것도 나오지 않았습니다. 방법이 잘못된 것일까요?
  3. querySelector(".cargo-table")에서 cargo-table앞에 .(점)의 의미를 알 수 있을까요?

아래는 HTML 원문 및 현재 VBA 코드입니다.

HTML VBA
<table class="cntr-list">
<thead>
<tr>
<th>No.</th>
<th>컨테이너 넘버</th>
<th>규격</th>
<th>봉인번호</th>
</tr>
</thead>
<tbody>
<!----><tr>
<td>1</td>
<td>BMOU6087550</td>
<td>45GP</td>
<td>
DJS083590

</td>
</tr><tr>
<td>2</td>
<td>DJLU5017697</td>
<td>45GP</td>
<td>
DJS087241

</td>
</tr><tr>
<td>3</td>
<td>DJLU5156331</td>
<td>45GP</td>
<td>
DJS083589

</td>
</tr><tr>
<td>4</td>
<td>DRYU9914099</td>
<td>45GP</td>
<td>
DJS083585

</td>
</tr><tr>
<td>5</td>
<td>PHRU8601071</td>
<td>45GP</td>
<td>
DJS083588

</td>
</tr><tr>
<td>6</td>
<td>PHRU8604300</td>
<td>45GP</td>
<td>
DJS083601

</td>
</tr><tr>
<td>7</td>
<td>PHRU8701316</td>
<td>45GP</td>
<td>
DJS083624

</td>
</tr>
</tbody>
</table>

Public Sub GetTable()

Dim html As MSHTML.HTMLDocument, hTable As Object, ws As Worksheet, url As Range, hBody As Object
Set url = Worksheets("Sheet1").Range("A3")
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set html = New MSHTML.HTMLDocument

With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
html.body.innerHTML = .responseText
End With

Set hTable = html.querySelector(".cargo-table")

Dim td As Object, tr As Object, th As Object, r As Long, c As Long

For Each tr In hTable.getElementsByTagName("tr")
r = r + 1: c = 1

For Each th In tr.getElementsByTagName("th")

ws.Cells(r + 5, c) = th.innerText
c = c + 1

Next

For Each td In tr.getElementsByTagName("td")

ws.Cells(r + 5, c) = td.innerText

c = c + 1

Next
Next

End Sub

URL : https://www.tradlinx.com/unipass?type=1&blNo=DJSCBKIQ0N102401&blYr=2021

 

긴 글 읽어주셔서 감사합니다! ( _ _ )

 

전체 3

  • 2021-12-21 12:36
    Set hTable = html.querySelector(".cargo-table")

    Set hTable = html.querySelector(".cntr-list")

    로 바꾸면 될 것 같은데요?

    만약 아래처럼 바꿔도 안된다면 페이지 안에 cntr-list 라는 클래스 테이블이 여러개 있어서 그럴 확률이 높습니다

    . 은 클래스를 구분하는 기호입니다. CSS 셀렉터를 한번 공부해보세요


    • 2021-12-21 13:36

      @엑셀은즐거워 님 아 질문에 해상 클래스 테이블명을 안바꾸고 올렸네요 ㅠㅠ

      cntr-list로 바꾸고 실행을 하면

      <thead> 부분인 머릿말 (No. 컨테이너 넘버, 규격, 봉인번호)만 크롤링되고

      <tbody> 부분이 크롤링되지 않습니다 ㅠㅠ

      혹시 cntr-list 안에 <thead>,<tbody> 두개의 태그가 있어서 첫 번째 태그항목만 불러오는 걸까요?


      • 2021-12-23 16:18
        채택된 답변

        @최인섭 님 아마 thead 영역만 잡혀서 그런 것 같은데..

        hTable.getElementsByTagName("tbody")

        이걸 tr 앞에 한번 더 묶어서 크롤링해보세요

        그럼 toby안에 tr만 불러올겁니다


전체 5,201
번호 카테고리 제목 작성자 작성일 추천 조회
알림
하루 딱 "1분", 진짜 쓰는 엑셀 꿀팁 👉 "오빠두엑셀" 인스타그램 오픈! (30)
트로피 오빠두엑셀 | 2021.10.12 | 추천 23 | 조회 796
트로피 오빠두엑셀 2021.10.12 23 796
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (21)
오빠두엑셀 | 2021.10.28 | 추천 32 | 조회 2479
트로피 오빠두엑셀 2021.10.28 32 2479
26343 함수/공식
New 전산입고품목과 실제입고품목의 실재고조사관련 양식(함수+피벗테이블)첨언좀 부탁드립니다.도와주세요! 첨부파일 (3)
sunjong**** | 16:42 | 추천 0 | 조회 31
sunjong**** 16:42 0 31
26341 VBA
New VBA 내 배열 통합(쿼리 통합 기능을 VBA에서 구현하고자 합니다.) 첨부파일
병욱 | 16:13 | 추천 0 | 조회 19
병욱 16:13 0 19
26339 VBA
New 많은 텍스트상자안 문자 찾기 (1)
noeu**** | 15:44 | 추천 -1 | 조회 22
noeu**** 15:44 -1 22
26338 함수/공식
New 지정한 일수(days)를 달력에 자동으로 표시 되게끔 설정이 가능한가요? 첨부파일 (1)
말창 | 15:26 | 추천 0 | 조회 23
말창 15:26 0 23
26336 함수/공식
New 셀안 동일 회사명을 순차 카운트를 하고 싶습니다. (3) 답변완료
sickp**** | 15:06 | 추천 0 | 조회 23
sickp**** 15:06 0 23
26334 함수/공식
New 이름만 치면 열 다 띄워주는 방법을 알려주세요 첨부파일 (8) 답변완료
아마테라스 | 14:49 | 추천 0 | 조회 33
아마테라스 14:49 0 33
26329 VBA
New VBA 자동으로 그룹 구분하여 sheet split 기능 행열 전환 관련 질문드립니다. 첨부파일
shon**** | 13:53 | 추천 0 | 조회 12
shon**** 13:53 0 12
26324 기능/도구
New 파일 오류로 열리지 않습니다. (2)
가을남자 | 12:48 | 추천 0 | 조회 18
가을남자 12:48 0 18
26323 함수/공식
New 불려오는 data 행 길이에 따라 자동으로 행길이 바뀌도록 하는 수식/기능 관련 첨부파일 (1)
엑초파 | 12:16 | 추천 0 | 조회 29
엑초파 12:16 0 29
26308 VBA
New pdf 로 자동 저장하고 싶습니다. 첨부파일
wan**** | 04:36 | 추천 0 | 조회 37
wan**** 04:36 0 37
26295 파워쿼리/피벗
New 피벗테이블 '각 필드에 유지할 항목 수'에서 질문입니다. (3)
월마리아 | 2022.01.23 | 추천 0 | 조회 30
월마리아 2022.01.23 0 30
26294 함수/공식
New 합계값이 일치하지 않는 값 구하기! (1)
정해인 | 2022.01.23 | 추천 0 | 조회 35
정해인 2022.01.23 0 35
26290 함수/공식
New 기간구분 IF함수 에러 원인이 뭔지 모르겠어요 (6) 답변완료
마운틴 | 2022.01.23 | 추천 0 | 조회 39
마운틴 2022.01.23 0 39
26285 함수/공식
New 이번주 시작일(월요일), 마지막일(금요일) yyyy-mm-dd 형식으로 출력하는 방법 (1)
joeee | 2022.01.23 | 추천 0 | 조회 37
joeee 2022.01.23 0 37
26284 피벗테이블
New 피벗 테이블 날짜인식 및 월별 그룹화 관련 첨부파일 (3)
baechu9 | 2022.01.23 | 추천 0 | 조회 31
baechu9 2022.01.23 0 31
26278 피벗테이블
New 피벗테이블 영상보면서 따라해보고 있는데요 잘안되요 ㅠ 첨부파일 (1)
희야맘 | 2022.01.23 | 추천 0 | 조회 23
희야맘 2022.01.23 0 23
26276 문서서식
New [조건부 서식] 아직 데이터가 입력되지 않은 칸에 조건부 서식 적용하지 않도록 하기 첨부파일
jo2 | 2022.01.23 | 추천 0 | 조회 33
jo2 2022.01.23 0 33
26268 함수/공식
New 조건부서식 내에서 INDIRECT 함수와 AND 함수를 함께 사용할 수 없나요? (10)
나는나 | 2022.01.22 | 추천 0 | 조회 68
나는나 2022.01.22 0 68
26260 함수/공식
New 각 지점별 연,월 매출의 합을 구하고 싶습니다. 첨부파일 (4) 답변완료
창이 | 2022.01.22 | 추천 1 | 조회 44
창이 2022.01.22 1 44
26246 함수/공식
New 엑셀 월 구하기 주 구하기 질문 입니다. 첨부파일 (3)
천고마비 | 2022.01.22 | 추천 0 | 조회 45
천고마비 2022.01.22 0 45
26243 함수/공식
특정 조건 행 제외 후 다른 시트에 리스트화 첨부파일 (4) 답변완료
상큼한도로시 | 2022.01.21 | 추천 0 | 조회 48
상큼한도로시 2022.01.21 0 48
26239 VBA
재고관리 프로그램에서 검색할 때 체크박스 사용하는 방법이 궁금합니다. (1)
엑셀열공 | 2022.01.21 | 추천 0 | 조회 54
엑셀열공 2022.01.21 0 54
26237 피벗테이블
시간표시막대 질문 (1)
최재영 | 2022.01.21 | 추천 0 | 조회 41
최재영 2022.01.21 0 41
26236 함수/공식
컨트롤 f (찾기) 로 함수의 결과값 검색방법이 있나요? (1)
정지훈 | 2022.01.21 | 추천 0 | 조회 34
정지훈 2022.01.21 0 34
26234 함수/공식
함수를 대량변경하고싶은데 가능한지 문의드립니다. (1)
정지훈 | 2022.01.21 | 추천 0 | 조회 42
정지훈 2022.01.21 0 42
26229 함수/공식
함수를 어떤걸 써야 될지 모르겠습니다. 첨부파일 (3) 답변완료
조커 | 2022.01.21 | 추천 0 | 조회 58
조커 2022.01.21 0 58
26223 VBA
버튼이 클릭이 되지 않습니다. 방법을 모르겠어요. 첨부파일 (5)
다르마 | 2022.01.21 | 추천 0 | 조회 43
다르마 2022.01.21 0 43
26222 VBA
자료찾기 vba 문의드립니다. (2) 답변완료
ㅈㄱㄹ | 2022.01.21 | 추천 0 | 조회 46
ㅈㄱㄹ 2022.01.21 0 46
26220 함수/공식
엑셀 셀값 동일 데이터를 순서대로 카운터 하고 싶습니다. (4) 답변완료
sickp**** | 2022.01.21 | 추천 0 | 조회 41
sickp**** 2022.01.21 0 41
26217 VBA
엑셀 매크로 렉걸림해결방법문의 (1)
dud**** | 2022.01.21 | 추천 -1 | 조회 36
dud**** 2022.01.21 -1 36