엑셀 VBA 크롤링 총정리 :: 네이버 뉴스 읽어오기 매크로

엑셀 VBA 매크로를 사용한 웹 크롤링의 기초 원리와 네이버 뉴스를 읽어오기 위한 VBA 전체 명령문의 동작을 하나씩 단계별로 살펴봅니다.

홈페이지 » 엑셀 VBA 크롤링 총정리 :: 네이버 뉴스 읽어오기 매크로

엑셀 VBA 크롤링 총정리 및 실전예제 :: 네이버 뉴스 크롤링 매크로

강의 요약

엑셀 VBA 매크로 명령문으로 원하는 홈페이지의 내용을 '크롤링'하는 방법을 단계별로 알아봅니다. 본 강의에서는 네이버 뉴스 기사를 스크랩하는 VBA 매크로를 작성해봅니다. 이번 강의는 아래 순서로 진행됩니다.

업데이트 노트
  • 2019년 10월 04일
    : 엑셀 2013 이하 버전에서는 ENCODEURL 함수를 사용자지정함수로 추가해야합니다. 자세한 내용은 ENCODEURL(VBA) 함수 관련 포스트를 참고하세요.
  • 2020년 5월 9일
    : 테이블(table) 및 목록(ul, ol) 항목을 실시간으로 크롤링 할 수 있는 IMPORTHTML 함수 추가기능을 업데이트 하였습니다.
완성파일 다운로드
영상강의

1. 시트에 웹브라우저 추가하기

개발자도구에서 [삽입] 을 클릭한 뒤, [Active X 컨트롤]의 추가 도구상자를 클릭합니다. 추가 도구상자에서 Microsoft Web Browser 를 선택하여 시트에 추가합니다.

엑셀 VBA 크롤링 웹 브라우저 추가
Microsoft Web Browser 컨트롤을 시트위에 삽입합니다.
주의사항

엑셀 2013 이후 버전 사용자는 Web Browser Control을 삽입할 때 Windows 보안문제로 오류가 발생합니다. 따라서 아래 순서대로 레지스트리 값을 변경해줘야 합니다.

  1. 변경해야 할 레지스트리 값
    {8856F961-340A-11D0-A96B-00C04FD705A2}
  2. 키보드의 윈도우키 + R 을 눌러 ‘실행’ 창을 불러온 뒤, 'Regedit’을 입력합니다.

    엑셀 VBA 웹 브라우저 삽입 레지스트리 키 변경
    실행창에서 ‘Regedit’을 입력합니다.
  3. 레지스트리 편집기가 실행되면, 좌측의 목록에서 아래 적어드린 경로로 이동합니다.
    Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
  4. MicroSoft 폴더를 우클릭한 뒤, 아래 적어드린 레지스트리 키값을 붙여넣기하여 검색합니다.
    {8856F961-340A-11D0-A96B-00C04FD705A2}

    영상강의에서는 InternetExplorer의 하위폴더로 잘못 전달해드렸습니다.
    반드시 Microsoft Office 하위 폴더에 있는 Compatibility Flags 레지스트리를 변경해주세요!

    엑셀 VBA 웹 브라우저 레지스트리 키 검색
    레지스트리 키값을 검색합니다ㅏ. Microsoft\Office 하위 폴더에서 ‘Compatibility Flags’ 를 찾습니다.
  5. 사용중인 윈도우버전과 설정에따라 Compatibility Flags 레지스트리 위치가 다를 수 있습니다. 따라서 한번에 검색이 안될 경우 키보드 F3키를 눌러 Compatibility Flags가 나올때까지 검색합니다.

    만약 윈도우 10 / 엑셀 오피스 365를 사용중이실경우, 아래 경로를 붙여넣기하면 바로 이동할 수 있습니다.
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Common\COM Compatibility\{8856F961-340A-11D0-A96B-00C04FD705A2}

  6. Compatibility Flags를 더블클릭 한 뒤, Value Data를 ‘0’으로 변경합니다.

    엑셀 웹 브라우저 삽입 안됨 레지스트리 변경
    ValueData를 0으로 변경한 뒤 확인을 눌러주세요.
  7. 모든 단계를 완료한 뒤, 엑셀을 재실행하면 웹브라우저가 정상적으로 삽입됩니다.

    만약 모든 단계를 진행해도 여전히 '개체를 삽입할 수 없습니다' 라는 오류가 발생할 경우, 관련문제 해결방법을 더욱 자세히 적어드렸으니 관련포스트를 참고해주세요.

2. 보조 라이브러리 추가하기

인터넷 익스플로러 개체와 HTML 개체, 그리고 사용자정의폼 컨트롤 개체를 활용하기 위해 보조라이브러리를 추가합니다.

총 3개의 라이브러리를 추가합니다. Alt + F11키를 눌러 매크로 편집창을 실행한 뒤, [도구] – [참조]를 클릭하여 아래 3개의 라이브러리를 추가해주세요.

  1. Microsoft Internet Controls : 인터넷 익스플로러(웹 브라우저)를 사용하기 위한 라이브러리입니다. 시트 또는 유저폼에서 Web Browser를 삽입하면 자동으로 추가됩니다.
  2. Microsoft HTML Object Library : HTML 개체를 사용하기 위한 라이브러리입니다. 사용자가 직접 선택하여 추가합니다.
  3. Microsoft Forms 2.0 Object Library : 유저폼 개체 (버튼, 콤보박스 등..) 을 활용하기 위한 라이브러리입니다. [삽입] – [유저폼]을 클릭하여 유저폼을 생성하면 자동으로 추가됩니다.
엑셀 크롤링 라이브러리 추가
[도구] – [참조]로 이동하여 3개의 라이브러리가 추가되었는지 확인합니다.

3. 크롤링 명령문 변수 설정하기

이번 강의에서는 총 4개의 변수를 설정합니다.

  • MyBrowser As InternetExplorer : 웹브라우저 개체를 나타냅니다.
  • HTMLDoc As HTMLDocument : 웹브라우저에서 추출해올 HTML 문서입니다.
  • iArticle As IHTMLElement : HTML문서에서 각 Class별로 추출할 개체입니다.
  • i As Long : 각 개체에서 추출한 값을 출력할 행 번호를 나타냅니다.
Dim MyBrowser As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim iArticle As IHTMLElement
Dim i As Long
 
'// 익스플로러 변수를 시트의 WebBrowser1 브라우저로 설정합니다.
Set MyBrowser = Sheet1.WebBrowser1

4. 크롤링 타겟 URL 쿼리문 분석

네이버에서 뉴스기사를 스크랩해오기 위해서는 URL의 쿼리문을 이해해야합니다. 검색 쿼리문은 네이버 검색 정책에 따라 바뀔 수도 있으며, 상황에 따라 유기적으로 수정해줘야 합니다.

4-A. 검색 항목 및 검색할 단어 쿼리문 분석하기
  • 네이버에서 ‘유튜브’를 검색한 뒤, ‘뉴스 더보기’ 버튼을 클릭하여 뉴스 페이지로 이동합니다. 그럼 아래의 URL 주소로 이동합니다.
    search.naver.com/search.naver?&where=news&query=%EC%9C%A0%ED%8A%9C%EB%B8%8C&sm=tab_tmr&frm=mr&nso=so:r,p:all,a:all&sort=0
  • Where=news 요소는 네이버 검색 항목 중, 뉴스 페이지를 보여주는 항목으로 알 수 있습니다.
  • Query=’URL인코딩(유튜브)’ 요소는 해당 검색어 결과값을 출력하는 항목으로 이해할 수 있습니다.
  • 그 외에 나머지 항목들은 크게 중요하지 않으므로 아래 URL링크만 복사하여 URL 검색을 해봅시다.
    search.naver.com/search.naver?&where=news&query=%EC%9C%A0%ED%8A%9C%EB%B8%8C
  • 나머지 항목을 지웠지만, 이사없이 원하는 단어로 잘 검색되는 것을 확인할 수 있습니다.
4-B. 검색할 페이지 번호 쿼리문 분석하기
  • 이번에는 페이지 이동을 해보겠습니다. 2번째 페이지로 이동하면, 아래와 같은 URL로 이동합니다.
    search.naver.com/search.naver?&where=news&query=%EC%9C%A0%ED%8A%9C%EB%B8%8C&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:r,p:all,a:all&mynews=0&cluster_rank=14&start=11&refresh_start=0
  • Where 항목과 Query 항목은 이전과 동일합니다.
  • 그 뒤에 또 다른 여러 항목들이 추가되었으나, 자세히보면 페이지 이동과 관련있어보이는 항목은 ‘Start’ 항목인 것을 볼 수 있습니다.
  • 이번엔 쿼리문을 아래와 같이 작성하여 검색을 해보겠습니다. 마찬가지로 이상없이 잘 검색되는 것을 볼 수 있습니다.
    search.naver.com/search.naver?&where=news&query=%EC%9C%A0%ED%8A%9C%EB%B8%8C&start=11
  • Start 값을 12, 13으로 변경하면 각 순번에 해당하는 기사를 페이지의 첫번째 기사로 출력합니다.

5. 웹브라우저에서 URL 검색하기

변수로 설정한 MyBrowser에서 Navigate 함수를 사용하여 원하는 URL로 이동합니다.

With MyBrowser
    .Navigate Sheet1.Range("B2").Value
 
    '// Wait_Browser에 대한 내용은 VBA2-3 이전 강의를 참고하세요.   
    Wait_Browser MyBrowser
End With
 
'//-------------------Wait Browser 명령문 추가.
 
Sub Wait_Browser(Browser As InternetExplorer, Optional t As Integer = 1)
 
While Browser.Busy Or Browser.ReadyState <> 4
DoEvents
Wend
 
Application.Wait DateAdd("s", t, Now)
 
End Sub

링크] MS 홈페이지 WebBrowser.Navigate 함수 상세설명 보러가기

6. HTML 개체 분석하기

6-A. 웹브라우저의 페이지분석툴 사용

인터넷익스플로러/크롬/Edge/파이어폭스 등 모든 웹브라우저에서는 페이지분석툴 기능을 제공합니다. 본인이 사용하기 편한 웹브라우저 창에서 키보드 F12키를 눌러서 페이지분석툴을 실행합니다.

이후, 분석툴에서 ‘마우스커서’ 모양의 아이콘을 클릭한 뒤, 본인이 스크랩하고자 하는 항목위로 커서를 이동하면 해당 항목에 대한 HTML 코드를 확인할 수 있습니다.

크롬 크롤링 HTML 페이지분석 툴 사용
웹브라우저의 페이지분석툴을 활용하면 HTML코드를 쉽게 분석할 수 있습니다.
6-B. HTML코드안의 원하는 개체 및 요소 찾기

네이버 뉴스 검색 페이지에서 HTML 문을 확인합니다. 각 기사를 나타내는 개체는 'sp_each_title' 클래스이며, 기사의 제목과 링크는 해당 클래스의 'title' 및 'href' 요소에서 가져올 수 있습니다.

  • 기사 개체 : sp_each_title 클래스
  • 기사 제목 : 해당 클래스의 Title 요소
  • 기사 링크 : 해당 클래스의 href 요소
네이버 크롤링 HTML 개체 확인
원하는 개체 위로 마우스커서를 이동하면 해당 개체의 HTML 코드를 확인할 수 있습니다.
6-C. VBA에서 원하는 개체 불러오기

VBA 의 HTML Object Library에서 지원하는 HTML문서의 각 개체를 끌어오는 방법은 크게 3가지입니다.

(그 외에, HTML 문서를 전부 읽어와 Instr 함수를 사용해 수작업하는 방법도 있습니다만,
상당히 번거로운 작업이므로 불가피한 상황을 제외하곤 아래 3가지 방법을 사용합니다.)

HTML 문에서 개체의 ID와 Class 요소로 찾아 값을 반환하는 방법은 이전 강의인 네이버 유저폼 만들기 강의에서도 설명드린적이 있습니다. 궁금하신분은 관련 링크를 참고하세요.

  1. .getElementById
    : HTML문서에서 개체의 ID 값으로 개체를 찾아 반환합니다. 하나의 문서에서 ID는 고유값으로 한개만 존재합니다.따라서, 스크랩할 개체가 ID값을 가지고 있을 경우 아주 간단하게 스크랩할 수 있습니다.
  2. .getElementsByClassName
    : HTML문서에서 개체의 Class 값으로 개체를 찾습니다. 하나의 문서에서 동일한 Class 명을 가진 개체는 여러개 존재할 수 있으므로, For문을 통해 원하는 개체를 필터링하여 개체를 찾아 사용합니다.
  3. .getElementsByTagName
    : HTML 문서에서 개체의 Tag 값으로 개체를 찾습니다. 대부분의 경우 getElementByID와 getElementByClass 함수로 원하는 개체를 불러올 수 있으나, a 태그 (링크태그) 또는 head 태그 (머릿말태그) 등 특정 태그를 불러올 시 사용합니다.
'// HTML 문서 추출
    Set HTMLDoc = .Document
 
    '// 최초 행값 입력
    i = 6
 
    '// HTML 개체검색
    For Each iArticle In HTMLDoc.getElementsByClassName("_sp_each_title")
        '// 요소별 값 추출
    Next
6-D. 각 개체의 요소값 추출하기

추출한 개체의 요소별로 값을 추출합니다. 우리가 필요한 값은 기사의 제목과 링크입니다. 따라서 ‘title’과 ‘href’의 요소 값을 추출합니다. IHTMLElemet 개체에서 title 은 기본 함수로 불러올 수 있으며, href 요소는 getAttribute 함수를 이용하여 불러옵니다.

'// HTML 개체검색
    For Each iArticle In HTMLDoc.getElementsByClassName("_sp_each_title")
        '// 요소별 값 추출
        Sheet1.Cells(i, 1) = iArticle.Title
        Sheet1.Cells(i, 2) = iArticle.getAttribute("href")
        i = i + 1
    Next

7. 셀에 하이퍼링크 추가하기

입력된 기사 링크를 클릭하면 자동으로 해당 기사로 이동할 수 있도록 각 셀에 하이퍼링크를 연결합니다. 아래 명령문을 For Each 명령문 중간에서 'i를 더해주는 이전 단계'에 붙여넣기 합니다.

Sheet1.Hyperlinks.Add Sheet1.Cells(i, 2), Sheet1.Cells(i, 2)
엑셀 크롤링 하이퍼링크 삽입
하이퍼링크를 추가하면 사용자가 보다 편리하게 원하는 기사로 이동할 수 있습니다.

8. 버튼에 매크로 삽입 및 크롤링 완료 메세지 띄우기

명령문이 종료되면 스크랩이 완료되었다는 안내메세지를 띄워줍니다. 아래 코드를 명령문 가장 마지막부분에 복사해서 붙여넣기합니다.

MsgBox "검색하신 단어 [" & Sheet1.Range("B1") & "] 에 대한 네이버 뉴스기사 스크랩핑을 완료하였습니다."
엑셀 웹 크롤링 안내 메세지 띄우기
기사 스크랩이 완료되었다는 안내메세지를 띄워줍니다.

[개발자도구] – [삽입] – [사용자양식컨트롤] 에서 ‘버튼’을 추가합니다. 이후 버튼을 우클릭 한 뒤, 매크로 지정으로 이동합니다. 매크로 목록에서 ‘Web_scraping’ 명령문을 버튼에 입혀줍니다. 엑셀 사용자양식컨트롤에 대한 자세한 내용은 관련 링크를 참고하세요.

크롤링 기능 버튼에 매크로 삽입
버튼에 매크로를 입혀줍니다. 이후 버튼을 클릭하여 네이버 뉴스 스크랩을 할 수 있습니다.

9. 강의에 사용된 네이버 뉴스 크롤링 전체 명령문

Option Explicit
 
Sub Web_scarping()
 
Dim MyBrowser As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim iArticle As IHTMLElement
Dim i As Long
 
'// 익스플로어(XML변수 설정)
Set MyBrowser = Sheet1.WebBrowser1
 
'// 검색 (XML 요청)
With MyBrowser
    .Navigate Sheet1.Range("B2").Value
 
    Wait_Browser MyBrowser
 
    '// HTML 추출
    Set HTMLDoc = .Document
 
    i = 6
 
    '// 개체검색
    For Each iArticle In HTMLDoc.getElementsByClassName("_sp_each_title")
        '// 요소별 값 추출
        Sheet1.Cells(i, 1) = iArticle.Title
        Sheet1.Cells(i, 2) = iArticle.getAttribute("href")
        Sheet1.Hyperlinks.Add Sheet1.Cells(i, 2), Sheet1.Cells(i, 2)
        i = i + 1
    Next
 
End With
 
MsgBox "검색하신 단어 [" & Sheet1.Range("B1") & "] 에 대한 네이버 뉴스기사 스크랩핑을 완료하였습니다."
 
 
End Sub

10. ENCODEURL 함수 추가하기(엑셀 2013 이하 버전)

엑셀 2013 이전 버전 사용자의 경우 아래 ENCODEURL 사용자지정함수를 추가해야합니다.

Function ENCODEURL(varText As Variant, Optional blnEncode = True)
 
'############################################################
'한글/영문 텍스트를 URL 주소로 변경합니다.
'http://www.oppadu.com/vba-encodeurl-함수/
'############################################################
 
Static objHtmlfile As Object
 
If objHtmlfile Is Nothing Then
    Set objHtmlfile = CreateObject("htmlfile")
    With objHtmlfile.parentWindow
    .execScript "function encode(s) {return encodeURIComponent(s)}", "jscript"
    End With
End If
 
If blnEncode Then
    ENCODEURL = objHtmlfile.parentWindow.encode(varText)
End If
 
End Function

자주묻는질문

Q1. 웹페이지 전체의 서식을 유지한채 시트에 붙여넣기 하고 싶어요

인터넷 창에 보이는 전체페이지의 서식을 유지한채 엑셀에 붙여넣기 하려면 아래의 적어드린 코드를 응용해보세요.

단,페이지의 크기, 페이지에 사용된 개체 항목 개수(체크박스, 텍스트박스 등..)에 따라 동작속도가 느려질 수 있으므로 주의가 필요하며, 상황에따라 적절히 수정해서 사용할 수 있습니다.

아래 명령문은 With My Browser ~ End With 사이에 붙여넣기 한 뒤 사용하세요. 수정된 명령문을 실행하면 웹페이지 전체를 복사한 뒤 새로 생성한 시트에 서식을 유지한 채 붙여넣기 합니다.

'// <--!기존 명령문의 With MyBrowser ~ End With 를 아래 명령문으로 대체합니다 -->
'################################
' 웹페이지의 크기, 사용된 개체수에 따라 동작속도가 느려질 수 있으므로 주의합니다.
' 새로운 시트를 생성한 뒤 웹페이지 전문을 복사/붙여넣기 합니다
'################################
With MyBrowser
    .Navigate Sheet1.Range("C3").Value
 
    Wait_Browser MyBrowser
 
    '// HTML 추출
    Set HTMLDoc = .Document
    .Document.execCommand "SelectAll"
    .Document.execCommand "Copy"
 
    Application.ScreenUpdating = False
    Dim newWS As Worksheet
    Set newWS = ThisWorkbook.Worksheets.Add
 
    newWS.PasteSpecial , False, False
    Application.ScreenUpdating = True
 
End With
Q2. 여러개의 클래스를 가진 개체를 불러오고 싶습니다.

크롤링 작업시, 특별한 경우를 제외한 대부분의 경우 Tag와 Class 항목을 기준으로 값을 불러옵니다. Tag 값은 1개로 고정되어 있어 문제가 되지 않지만, 만약 여러개의 Class를 가진 개체를 불러올 때는 어떻게 해야할까요?

1 네이버 쇼핑 여러개 클래스
여러개의 클래스를 가진 항목을 불러오려면 어떻게 해야할까요?

우선 한가지 팁을 드리자면, 여러개의 클래스가 입력된 경우의 "대부분은 마지막에 입력된 클래스로만 값을 불러오면 잘 동작"하는 경우가 많습니다.

3 대부분 마지막 CLASS로 구분
대부분의 경우 마지막에 입력된 클래스로 개체를 지정하면 잘 동작합니다.
AND 조건으로 여러개의 CLASS를 구분해야 할 경우

하지만 반드시 두개의 클래스를 동시에 지정해야하는 상황이라면, .getElementsByClassName에서 클래스를 '띄어쓰기'로 구분하여 입력합니다. 띄어쓰기로 클래스를 구분하여 입력하면 .getElementsByClassName은 여러개의 클래스를 "AND" 형식으로 묶어서 불러옵니다.

iArticle In HTMLDoc.getElementsByClassName("num _price_reload")
'// 클래스가 num 이고 _price_reload 인 개체를 불러옵니다.
2 클래스 띄어쓰기 AND 조건
여러개의 클래스를 AND 조건으로 불러옵니다.
OR 조건으로 여러개의 CLASS를 구분해야 할 경우

그렇다면, AND 형식이 아니라 OR 형식으로 불러와야 할 경우에는 어떻게 해야 할까요?

만약 XML을 이용하고 헤더값으로 최신버전의 Agent를 사용하여 HTML 문을 읽어왔다면 .querySelectorAll 함수를 이용할 수 있습니다. 예를들어 A클래스 또는 B클래스 개체를 모두 불러오고 싶을경우 아래와 같이 함수를 입력합니다.

HTMLDoc.querySelectorAll(".A클래스,.B클래스")

하지만 엑셀 VBA에서 제공하는 Internet Exlporer 라이브러리를 사용한다면 .querySelectorAll 함수 사용이 제한됩니다. (querySelectorAll 함수는 IE8 버전 이상에서만 동작)

따라서 이번 포스트에 적어드린 인터넷익스플로러를 사용한 명령문에서 OR 조건으로 여러개의 CLASS를 불러오기 위해서는 2가지 대안책을 고려할 수 있습니다.

  • For Each 문을 여러번 작성합니다.
    For Each iArticle In HTMLDoc.getElementsByClassName("A클래스")
    '// 본문입력
    Next
     
    For Each iArticle In HTMLDoc.getElementsByClassName("B클래스")
    '// 본문입력
    Next
     
    '// 반복...
  • 또는 추가 명령문을 작성하여 코드를 간소화 합니다.
    Sub Get_MultipleClasses(HTMLDoc As HTMLDocument, Classes as Variant)
     
    Dim iArticle As IHTMLElement
    Dim Class as Variant
     
    For Each Class in Classes
    	For Each iArticle In HTMLDoc.getElementsByClassName(Class)
    	'//본문입력
    	Next
    Next
     
    End Sub

     

4.9 31 votes
별점주기
현재 페이지 댓글알림 신청
알림 설정
guest
87 Comments
Inline Feedbacks
View all comments
졸려여

안녕하세요. 오빠두엑셀 참고해서 vba 공부하고 있습니다.
워낙 상세한 설명으로 인터넷 익스플로러를 통한 웹크롤링은 어느 정도 감을 잡았는데요.
크롬 웹브라우저를 이용해서 익스플로러와 동일한 크롤링을 해보고 싶은데 구글 찾아보아도 셀레니움을 이용하는 방식밖에 안나와서 문의드려요ㅎㅎ
1. Dim MyBrowser As InternetExplorer와 같이 As chrome 사용할 수 있는 방법이 없을까요
2. 1번의 internetexplorer일 때는 Set MyBrowser = Sheet1.WebBrowser1 에 에러가 없었으나 셀레니움 라이브러리 설치 후 chromedriver를 이용하면 vba에서 에러 발생합니다. 해결 방법이 있을까요?ㅠ

오빠두엑셀

안녕하세요?:) 오빠두엑셀입니다.
크롬 웹브라우저를 셀레니움 없이도 이용을 할수는 있습니다. 정말 이용만요... 크롬에서 제공하는 라이브러리가 있지만 VB6에서는 지원이 안되는걸 알고있어요..

1. 방법이 없습니다.
2. 셀레니움 라이브러리를 활성화 하신 뒤
Dim MyBrowser As New WebDriver
MyBrowser.Start "chrome", "http://google.com"
로 입력해보시겠어요?^-^

조성웅

이번 것은 완성 파일 안 올려주시나요?

오빠두엑셀

안녕하세요? 오빠두엑셀입니다.
포스트를 하나씩 수정하고 있습니다. 조만간 완성파일도 정리해서 올려드리도록 하겠습니다.
이번주 안으로 올려드릴테니, 주말에 다시 한번 확인주시겠어요?^_^* 감사합니다.

조성웅

감사합니다~ 역시 최고!

오빠두엑셀

안녕하세요? 오빠두엑셀입니다.
포스트를 하나씩 수정하고 있습니다. 조만간 완성파일도 정리해서 올려드리도록 하겠습니다.
이번주 안으로 올려드릴테니, 주말에 다시 한번 확인주시겠어요?^_^* 감사합니다.

오연택

안녕하세요. 예제파일로 연습도 해보고 싶은데 예제파일은 다운받을 수 없을까요~?

백종진

별점주기 :       너무 좋은강의 감사합니다 네이버 스마트스토어 자료 분석에 응용해보려 하는데요! 각 상품이 분류된 카테고리 명과 해당 검색키워드의 등록된 전체 상품수를 크롤링 하고싶은데 class로 도저히 값이 반환되지 않아서 문의드립니다… 더보기 »

귀염둥이

감사합니다! 잘 되는거같아요!!!!!

엑셀초보
별점주기 :
     

와~ 너무 신기해요. ^^
부동산 관련 책을 읽다가 저자가 부동산 분석 프로그램을 배포하는 것을 보았어요.

업데이트는 직접 다운 받아서 프로그램 폴더에 붙여넣어야하는데, 그 분석 프로그램을 GUI 프로그램과 웹 크롤링으로 만든 것 같아서 실제로 비슷하게 만들어보면 프로그래밍 독학이 재밌을 것 같아 이것저것 설치를 했는데, 어렵더라구요. ㅜ.ㅜ

그러다 우연히 이 곳에 들어왔는데 엑셀로 웹크롤링이 된다는 것과 엑셀에 포함된 User form으로 비주얼베이직 같은 GUI 를 만들 수 있다는 것을 처음 알았어요.

엑셀 기초~ VBA 등 고급 강의를 무료로 제공해주시는 것도 감사한데, 알기 쉽게 설명해 주셔서 정말 감사합니다.

새해 건강하시고, 복 많이 많으시길 기원합니다. ^^

박승용
별점주기 :
     

안녕하세요? 강좌 너무 잘 보고 있습니다. 많은 도움이 됩니다.
강좌 처음에 나오는 것처럼 이미지도 엑셀 시트에 넣고 싶은데 방법 알려주세요

천동빈
별점주기 :
     

열성적 강의 감사합니다.
저는 윈도우10에 EXCEL16을 상용하는데
시트에 웹브라우저 추가하기 를 위해
위의 설정대로 Compatibility Flags 값도 바꾸어 주었는데
자꾸 "개체를 삽입할 수 없습니다."와 수식 입력줄에 EMBED("Shell Explore.2", "")가
나타나 브라우저 삽입을 할 수 없습니다.
뭐가 잘못된 걸 까요?

유정훈

안녕하세요. 강의 너무 잘 보고 있습니다. 우선 감사드립니다.
EXCEL 2013과 2019를 사용하는데 두 버전 모두 천동빈씨와 같은 증상이 나타나서
선생님께서 말씀하신대로 따라서 레지스트리 값 변경을 그대로 따라서 했는데도
개체를 삽입할수가 없다고 나오네요. 어떻게 해야지 해결이 될까요..
회신 부탁드립니다. 항상 감사드립니다.

안웅환
별점주기 :
     

안녕하세요 강의 잘보고 있습니다. 덕분에 하나도 모르던 VBA에대해 조금씩 알아가고 있습니다. 제가 궁금한 것은 VBA로 엑셀안에 있는웹브라우저를 열어서 웹사이트 전체 화면 내용을 긁어 복사해서 주변서식에 맞게 붙여 넣고 싶은데 매크로 기록하기로 하면 이과정이 되지 않더라구요. 어떻게 하면 특정웹브라우저화면 내용을 복사해서 붙여넣기하는 VBA를 구현할 수 있을까요? 검색해서 찾아보았는데 결구 못찾아서 이렇게 여쭈어 봅니다. 감사합니다.

만능슈퍼믹
별점주기 :
     

정말 원하던 강의와 자료입니다. 감사합니다.

한가지 여쭙고 싶은 게 있는데.....

특정 class 하위에 a태그로 여러 링크가 있고 이 링크의 문자를 각각 엑셀의 셀에 나타내고자 합니다.

iArticle.innerText로 사용하고 있는데 이때에는 한 셀에 관련 문자가 한번에 입력이 되더라구요...

질문에 제대로 전달 될 수 있을지 모르겠지만 가능하시면 답변 부탁 드립니다.

만능슈퍼믹

빠른 답변 감사드립니다
잘 응용해 보겠습니다
새해 복 많이 받으세요

sarihwa1
별점주기 :
     

안녕하세요. 강의를 보고 웹 크롤링 VBA를 이해할 수 있었습니다. 감사합니다.

제가 궁금한 것은 웹페이지의 특정부분 데이터를 크롤링 하는 것이 아니라 웹페이지 전체를 복사할 수 있는 VBA작성입니다.

엑셀안에 웹브라우저를 동작시켰습니다. 원하는 사이트에서 화면을 마우스로 긁어서 복사하고 붙여넣기를 했습니다. 매크로 기록기로 긁고 주변서식에 맞춰 붙여넣기 한 것을 실행해보니 웹사이트 화면 전체 내용의 복사 붙여넣기가 안되어서 여러 사이트를 찾아보았지만 찾지 못했습니다.

어떤 방법이 있을까요?

comp.fnguide.com의 한 페이지 전부를 복사해서 엑셀시트에 주변서식 맞추기(그림등을 빼려고요)로 붙여넣고 싶습니다. 외국사이트에서도 제 능력의 범위에서는 못찾겠어요.. 도움이 필요합니다. 감사합니다.

sarihwa1

설날연휴임에도 불구하고 빠른 답변 감사드립니다. 덕분에 잘 해결되었습니다. 다시 한 번 감사드립니다.

free****

엑셀시트에 '주변서식 맞추기'로 붙여넣기가 안됩니다. 계속 그림 등이 따라 붙네요. 그리고 기존에 있는 시트에 웹페이지의 모든 항목을 복사.붙여넣기 하려면 어떻게 해야 하나요. 기존에 내용이 있으면 모두 삭제하고 붙여넣기 해야 할 것 같아요.

귀염둥이
별점주기 :
     

안녕하세요! 항상 좋은 강의 감사합니다.

이거 네이버기사 말고 혹시 구글검색에도 적용 가능한지 궁금합니다!
제가 외국 업체 검색하느라 구글링을 많이 하는데 하나하나 작업하기에 시간이 너무 많이 걸려서
지금 이 방식대로 구글에도 적용이 혹시 가능할까요?

예를 들어서 ㅇㅇ판매업체 키워드로 구글 메인 페이지에서 검색한 결과를 쭉 불러오고 싶은데..

귀염둥이

안녕하세요? 댓글이 엄청 빨리달려서 놀랐습니다! 그리고 친절한 답변 진심으로 감사합니다!

귀염둥이
별점주기 :
     

안녕하세요? 혼자하다가 도저히 모르겠어서 다시 한 번 질문글 올립니다.
위에분이 네이버쇼핑 언급하셔서 저도 네이버쇼핑 가져오기를 해보고있는데요
(기사 가져올때랑 똑같이 제목이랑 링크 쭉 나오게 하려고 합니다)

우선 웹브라우저뜨게하고 메인페이지에 URL이랑 페이지번호 맞추는거까진 얼추된거같습니다.
그런데 HTML코드를 보면 class가 네이버뉴스는 _sp_each_title로 되어있었는데, 쇼핑은 link라고 나와있습니다.
그래서 매크로창에 그대로 link라고 갖다붙이니까 당연히 안되고 링크가 주르륵 뜨는데 ㅠㅠ

제 생각에....
뉴스의 경우 네이버 자체 포스팅이라서 거기서 더 들어갈게 없지만
쇼핑의 경우 타사 쇼핑몰로 연결되게끔 되어있어서 link가 걸려있는거같다는 생각이 드는데요.

이걸 어떻게 해결할 수 있는지 도움 좀 주실 수 있을까요... 지금 반나절넘게 계속 이거 붙들고있는데 넘 답답합니다! ^^;;;
도와주세요

분홍돼지
별점주기 :
     

예제문서 다운받아 실행을 하면'컴파일 오류이빈다. 매서드나 데이터 구성원을 찾을 수 없습니다'라고 팝업이 발생되네요..

vba공부
별점주기 :
     

광고보는 시간이 아깝지 않는 강의 감사합니다.
강의를 보고 네이버 쇼핑에 적용을 해보았습니다. 그런데 궁금한 점이 생겼습니다.

상품 타이틀하고 링크는 한 줄에 같이 있는데 가격 같은 경우는 따로 class가 있어서 vba 편집창에 class 두개를 입력해야 되는데요. 이럴 경우 어떻게 해야되나요??

자세한 질문 사항은 아래 공유 링크(사진캡처)에 적어 놓았습니다.
https://1drv.ms/p/s!AjE1kgq2e4nBi3mIc7KtKUoVzw5f?e=1DENlk

DanyL
별점주기 :
     

선생님 여쭤볼 것이 있습니다.
저는 회사 서식을 만드려고 크롤링을 배우고 있는데요~
예를 들어, 대한토목학회의 홈페이지에 공지사항 페이지를 크롤링하려고합니다.
근데 네이버 쿼리문이랑 형식이 달라 쉽지 않은데..
홈페이지별 쿼리문 분석을 쉽게 할 수 있는 방법이 있을까요?

DanyL

혹시 그러면, 네이버 뉴스가 아닌, 위의 질문에 예로 들었던 대한토목학회 공지사항 페이지를 크롤링 할 수는 있는거죠?!

입문자
별점주기 :
     

안녕하세요 선생님! 차근차근 공부하고 있는 회사원입니다. 제가 입찰을 주로 하는 기관의 공고 게시판을 분석하고 있는데 소스 보기로 봐도 클래스로 보이지도 않고... 웹쪽 지식이 짧다보니..
https://www.gg.go.kr/archives/category/news_info/news_info-announce
이 페이지에 있는 게시판 첫번째 글의 제목하고 등록일만 따고 싶다고 했을때
어떤 것을 긁어와야하는지 알 수 있을까요?
.getElementById, .getElementsByClassName, .getElementsByTagName 로
넣어볼 수 있는건 넣어봤는데 클래스.타이틀 이런식으로 바로 읽기가 힘들어서
통 모르겠습니다 ㅠㅠ 하나만 잡아보면 감잡을듯 한데 혹시 확인 가능하실까요?

입문자

감사합니다. 차근 차근 속성값까지 확인하니 innerText에 텍스트가 들어가 있더라구요.. 그래서 타이틀이 아닌 innerText로 로딩하니 불러와집니다 . 감사합니다.

루다인
별점주기 :
     

엑셀초보인데, 크롤링에 입문할려고 검색하다
이리 좋은 곳을 알게되었네요~~~
근디 내용대로 진행했는데,,
경로에 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Common
여기까지는 갔는데, 그 이후 com compatibility라는 폴더가 없어서 레지던스값을 수정못하고있습니다.
어찌해야할지요?

hetsal
별점주기 :
     

드디어 제가 원하는 정보를 찾았네요!

여러 검색데이터를 입력하고 한꺼번에, 필요한 제목 데이터만 출력하는법은 없을까요?

감사해용
별점주기 :
     

안녕하세요 🙂
강의 너무 잘 봤습니다.
감사해요 ㅎㅎ

네이버 쇼핑에서 제목과 가격을 크롤링하고자 합니다.
먼저 남겨진 문의 확인 후 시도하다가 막혀서 추가로 문의드립니다.

1. 네이버 쇼핑의 가격(사진2)과 같이 별도의 태그가 지정되지 않은 값은 'Sheet1.Cells(i, 2) = iArticle.Value'형식으로 당겨온다고 이해하고 사진1과 같이 입력하였으나 '438 런타임 오류가 발생했습니다'로 경고창이 뜹니다.
어느부분에서 실수가 있었을까요?

2. '제목'과 '가격' 2가지 값을 당겨오기 위해 2가지 클래스에서 값을 당겨오도록 작성하였으나 ' i = i + 1'을 어느 위치에 배치해야하는지 모르겠습니다 ㅠ

답변 꼭 부탁드립니다 ㅠㅠㅠㅠㅠㅠ

감사해용

1번 질문의 경우에는 말씀 해주신대로 작성해 해결하였습니다. 정말 감사합니다.

2번 질문의 답변은 '동일 클래스 내의 2개 값을 가져오는 경우'로 보입니다. 궁금한 부분은 '서로 다른 2개의 클래스에서 각 1개씩의 값을 가져오는 경우'입니다.
2개의 조건문을 작성하는 것으로 자주묻는 질문 'OR 조건으로 여러개의 CLASS를 구분해야 할 경우'에서 확인하고 시도했습니다. 값은 정상적으로 가져오는걸 확인했는데 동일 행에 배치되지 않아 'i=i+1'의 위치를 여쭤보았습니다.

주말인데도 친절한 답변 너무 감사합니다 ㅠㅠ

감사해용

클래스별로 변수를 따로 선언(i -> a,b,c)해서 해결했습니다.
기초 사용법인데 앞단계를 건너뛰어 적용하려니 누락되었네요 ㅠ
번거롭게 해드려서 죄송합니다 ㅠ

아직 사용법이 미숙해서 몇가지 산출 오류가 남아있지만 처음부터 강의 들으면서 해결해볼 생각이에요 ㅎㅎ

유료강의로도 찾기 힘든 퀄리티의 강연을 접하게 해주셔서 정말 감사합니다 : )
오프 유료강의 계획이 혹시라도 생기시면 공지해주세요!
바로 달려가겠습니다 ㅎㅎㅎ

Gtavexir
별점주기 :
     

Q&A로 질문드리고 싶었지만 글쓰기 창을 찾지 못하여 댓글로 문의 드립니다! https://www.ldoceonline.com/dictionary/pencil 해당 링크에서 pencil과 같이 영 단어들의 영영 정의를 따로 크롤링해서 저만의 단어장을 만들고 싶은데 어떤것들은 #text라고 되어있고 다른 것들은 또 다른 클래스로 정의되있는데 이럴경우 어떻게 해야할까요?

Gtavexir

답변 감사합니다! 가입인사와 댓글을 작성하였는데도 일반회원이 되지 않네요 ㅠㅠ. 혹시 웹 브라우저를 생성하지 않고 크롤링하는 방법이 나와있는 질문 답변이나 강의가 있을까요?

리사
별점주기 :
     

안녕하세요~ 유튜브를 통하여 올려주 영상 너무 잘 보고 있습니다~
올려주신 영상을 보며 연습하던중 웹브라우저 없이 긁어오고 싶은데 이런 경우는 어떻게 해야될까요?

진격의크롤링

별점주기 :       안녕하세요. 올려주신 동영상을 보고 연습해보다 질문이 있어 댓글 남깁니다. 아래와 같은 HTML코드에서 1. 제목(DB 김종규의 아쉬움 "이렇게 쉬고 싶지는 않았다") 2. 링크(https://sports.donga.com/news/article/all/20200318/100222594/2) 3. 본문요약 부분(원주 DB 센터… 더보기 »

진격의크롤링

제가 링크를 잘못 올린것 같아요 ㅠㅠ 정말 죄송합니다. "https://sports.donga.com/news?p=1&c=all " 요 링크에 올라오는 실시간 뉴스기사들을 스크랩핑하고 싶습니다. 스크랩핑 하고 싶은 것들은 1. 제목 2. 제목 아래에 있는 기사 요약 3. 링크 입니다. 혹시 다시 한번 살펴봐 주실 수 있으실까요?

진격의크롤링

추가적으로
For Each iarticle In HTMLDoc.getElementsByClassName("tit")
Sheet2.Cells(i, 1) = iarticle.innerText
i = i + 1
이렇게 작성하니까 기사제목 뿐만 아니라 클래스가 "tit"로 설정된 것들도 같이 딸려오더라고요. 기사 제목만 추출하는 법이 있을가요?

Asis
별점주기 :
     

=hyperlink("https://홈페이지주소/search/"&D5)

"웹페이지주소 + 셀값" 형식으로
셀에 입력해서 사용하고있는 것을 '버튼'을 만들어 옮길 수 있는 방법이 있을까요?

노가리
별점주기 :
     

안녕하세요. 너무 바쁘신데 질문올려서 귀찮게 해드리는건 아닌지 모르겠습니다.
저는 강의해주신 것을 참고로 하여 daum.net 의 웹사이트 영역에서 크롤링을 해보고 있는데요.
강의해주신 대로 만들어서
For Each iArticle In HTMLDoc.getElementsByClassName("f_link_b")
로 수정을 했는데 제목이 크롤링이 되질 않습니다.
뭔가 다른 방법으로 해야할까요?

야미구미

별점주기 :       안녕하세요~ 선생님! 정말 귀한 강의 잘 보고 있습니다^^ 3시간동안 붙잡고 있는데 도저히 모르겠어 댓글 남깁니다 ㅠㅠ http://prod.danawa.com/list/?cate=112757 관련하여 제품명만 크롤링 하려 하는데요 밑에 남겨주신 댓글이나 위 강의를… 더보기 »

야미구미

안녕하세요! 선생님~! 업무가 피로하여 수 없이 잠들다 오늘에서야 시도하게 되었습니다!
선생님께서 주신 내용을 그대로 반영하였더니, 변수를 설정하라고 나옵니다.
그래서 변수를 iArticle이라고 놓고 시도해보았는데 ㅠㅠ 또 되지 않고 있습니다.
어떤 부분이 잘못 된걸까요??? ㅠㅠ 바쁘신데 부탁드립니다!

'// 개체검색

HTMLDoc = iArticle.innerHTML
For Each iArticle In HTMLDoc.GetElementbyClassName("prod_name")
If iArticle.tagName = "a" Then
Range("A1").Value = iArticle.innerText
End If
Next

약돌한우
별점주기 :
     

Vba로 dom parsing도 되는군요!! 놀랍습니다. 다른 프로그래밍으로 크롤링하고 다시 엑셀로 가져와서 정리했었는데 그럴 필요가 없군요. 좋은 정보 고맙습니다.

마시멜로하나더

별점주기 :       안녕하세요. 오빠두엑셀 참고해서 vba 공부하고 있습니다. 워낙 기초가 없어서 수없이 반복하고 참고해서 겨우겨우 따라하고 있네요..그래도 오빠두엑셀 덕분에 조금이나마 희망이 보이네요.. 오빠두엑셀에 올려주신 파일 따라해서 아래와 같이 만들긴… 더보기 »

calroid
별점주기 :
     

제가 윈도우 10 프로 오피스 2019 프로인데 레지스트 편집에서 0으로 바꿨는데요
익스플로 화면이 안나오는데...어떻게 하면 되나요?ㅜㅜ

calroid

아 알려주곳으로 가서 해보니 잘되네요 마이크로 그다음 오피스여야하는데 다른곳에서 해버렸네요..이런..ㅋㅋ 너무 감사드립니다. 잘됩니다.

gkindiscovery
별점주기 :
     

선생님, 안녕하세요. VBA 강의 유투브에서 틈틈이 보다가 오늘 정식으로 가입했습니다. 하나 하나 친절히 논리적으로 강의 잘 해주셔서 너무 감사합니다. 열심히 공부해 보겠습니다.

빨간모자권작가
별점주기 :
     

제가 열심히 강의 시청해가면서 따라 했는데 잘 저장하고 다음날에 파일을 열어보니 컴파일 오류가 났습니다. 오빠두님이 가르쳐주실걸로 공부할때 바꿧는데 컴퓨터를 껏다 키면 초기화(?)이런게 되나요? 아님 제가 잘못해서 그런걸까요? 할때마다 해줘야 하는건가요?

박민규
별점주기 :
     

정말 대단하십니다.
조금씩 배워나가야지 하고 시작은 했는데~~~
아직도 쉽지는 않네요.
참고해서 열심히 공부하겠습니다.

포도당
별점주기 :
     

훌륭한 강의 열심히 따라하려고 노력중입니다.
저는 예제로 주신 내용에서 신문사 명과 신문업데이트 날짜를
4행과 5행에 불러오고자 하는데
For Each 문을 여러번 작성해서 하려고 하니 오류가 발생합니다.
어떤 부분에서 문제가 발생해서 이런 것 일까요?

포도당

너무 기초적인 질문이었는데 친절하게 답변 주셔서 감사합니다.
어디서 잘못했는지 이해했습니다.^^

이재현

별점주기 :       안녕하세요. 유튜브와 웹페이지를 통해서 많은 도움을 받고 있습니다. 정말 감사드립니다. 네이버 크롤링 내용을 기초로 아마조 Url 이미지 다운로드를 응용하고 있습니다. 해결이 안되는 부분이 있어 글 남깁니다. 제가… 더보기 »

여시
별점주기 :
     

정말 많은 공부가 되고 있습니다.
사진 이미지(<img src = ....)도 추출해 리스트업 할수 있겠죠??
잘 안되네요....
알려주시면 감사하겠습니다.

추가로 주식이나 쇼핑몰 가격변동에 대해 관심이 있습니다.
한번 다루어 주시면 감사하겠습니다.

87
0
여러분의 생각을 댓글로 남겨주세요.x