1. 아별툴
  2. 아별툴 패밀리
  3. 엑셀 질문하기
  4. 엑셀 강좌
  5. 엑셀 팁
  6. 엑셀 자료실
  7. 엑셀 연구과제
  8. 엑셀 북마크
  9. 관련 프로그램 소개

ChatGPT를 활용한 웹크롤링

엑셀VBA 조회 수 44 추천 수 0 2024.06.28 11:22:11

ChatGPT4-o를 이용해서 엑셀 사용자 정의 함수(UDF)를 만들어 보자.


뉴스 URL을 가져오는 사용자 정의함수는 예전에 만들어놨는데, 

뉴스 URL에 해당하는 뉴스 본문 전체도 가져 오고 싶어 졌다.


처음부터 코딩하는건 귀찮고.. ChatGPT에게 코드를 만들어 달라고 했다.


프롬프트

 넌 엑셀 vba 개발자야.

신문 기사 url을 인수로 받아서, url에서 기사 제목과 기사 본문을 배열로 리턴하는 사용자 정의 함수를 만들어줘.


함수 정의

function importNews(sURL as string) as variant


리턴받을 변수 : sResult()

sResult의 필드 : 기사제목, 기사 본문, 기자 이름, 입력 및 수정, URL


예제

URL : https://n.news.naver.com/mnews/article/277/0005438348?sid=104

기사 제목 : 오픈AI, 美 타임지와 콘텐츠 사용 계약 "챗GPT 업그레이드"

입력 및 수정 : 입력2024.06.28. 오전 8:44  수정2024.06.28. 오전 8:45

기자 이름 : 김진영 기자

기사 본문 : 챗GPT 성능 향상을 위해 저명한 언론사들과 파트너십을 맺어온 오픈AI가 글로벌 주간지 타임지와도 손을 잡았다.

27일(현지시간) 오픈AI는 자사 홈페이지에 "챗GPT를 포함한 오픈AI의 제품에 타임지의 신뢰할 수 있는 저널리즘을 

.......... (이하 생략)



GPT답변

 엑셀 VBA에서 신문 기사 URL을 받아서 기사 제목, 기사 본문, 기자 이름, 입력 및 수정 날짜, URL을 배열로 반환하는 함수를 만드는 방법을 아래에 작성했습니다. 이 코드는 URL에서 HTML 콘텐츠를 가져와서 필요한 정보를 추출합니다.


 Function importNews(sURL As String) As Variant

    Dim http As Object

    Dim html As Object

    Dim sResult(1 To 5) As String

    Dim title As String

    Dim body As String

    Dim reporter As String

    Dim dates As String

    

    ' Create the necessary objects for HTTP request and HTML document

    Set http = CreateObject("MSXML2.XMLHTTP")

    Set html = CreateObject("HTMLFile")

    

    ' Send the HTTP request

    http.Open "GET", sURL, False

    http.send

    

    ' Wait for response

    Do While http.readyState <> 4

        DoEvents

    Loop

    

    ' Load the response HTML

    html.body.innerHTML = http.responseText

    

    ' Extract the article title

    On Error Resume Next

    title = html.getElementsByClassName("media_end_head_headline").Item(0).innerText

    On Error GoTo 0

    

    ' Extract the article body

    On Error Resume Next

    body = html.getElementsByClassName("media_end_body").Item(0).innerText

    On Error GoTo 0

    

    ' Extract the reporter name

    On Error Resume Next

    reporter = html.getElementsByClassName("byline").Item(0).innerText

    On Error GoTo 0

    

    ' Extract the dates

    On Error Resume Next

    dates = html.getElementsByClassName("media_end_head_info_datestamp").Item(0).innerText

    On Error GoTo 0

    

    ' Assign the extracted values to the result array

    sResult(1) = title

    sResult(2) = body

    sResult(3) = reporter

    sResult(4) = dates

    sResult(5) = sURL

    

    ' Return the result array

    importNews = sResult

End Function



이 함수는 다음 단계를 따릅니다:

  1. MSXML2.XMLHTTP 객체를 사용하여 HTTP 요청을 보냅니다.
  2. 응답 HTML을 HTMLFile 객체로 로드합니다.
  3. getElementsByClassName 메서드를 사용하여 기사 제목, 본문, 기자 이름, 입력 및 수정 날짜를 추출합니다.
  4. 추출한 값을 배열에 할당하여 반환합니다.

이 코드를 엑셀 VBA 편집기에 붙여넣고 사용하면 주어진 URL에서 필요한 정보를 추출할 수 있습니다. URL에 따라서 클래스 이름이 다를 수 있으니, 필요한 경우 해당 클래스 이름을 수정해야 합니다. 




VBE창에 모듈을 추가하고, 코드를 붙여넣은 다음에

워크시트에서 함수를 실행해본 결과.. 본문을 빼고는 꽤 잘 가져왔다.


=importNaverNews("https://n.news.naver.com/mnews/article/277/0005438348?sid=104")



본문 가져오는 코드를 보니, class명이 잘 못 지정되어있어서 아래와 같이 수정해줬다.


수정전

    body = html.getElementsByClassName("media_end_body").Item(0).innerText


수정후

    body = html.getElementsByClassName("newsct_article _article_body").Item(0).innerText

  

이제 본문도 잘 가져온다. 


이제..

네이버 신문말고다른 신문도 해보자~   

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜sort 조회 수
공지 엑셀일반 엑셀 짜투리 팁 모음.. imagefile [13] [레벨:30]아별 2005-07-22 93698
공지 엑셀일반 엑셀 잘 하는 요령은? _ 엑셀 추천사이트 포함 [2] [레벨:30]아별 2009-11-12 82410
공지 엑셀일반 엑셀 단축키(바로가는키, ShortCut) 총정리입니다. imagefile [247] [레벨:30]아별 2010-08-29 159300
16 엑셀일반 [ XML ] 엑셀로 XML 데이터 다루기.. file [2] [레벨:30]아별 2011-12-26 20960
15 엑셀함수 [링크] (초보자를 위한) '엑셀 달인'으로 인정받는 '함수' 사용법 imagefile [레벨:30]아별 2012-05-25 12327
14 엑셀일반 오피스 2013 프리뷰 버전 발표.. imagefile [레벨:30]아별 2012-07-24 10899
13 엑셀함수 INDEX와 SUMPRODUCT를 사용하여 2가지 이상 조건에 맞는 값 찾기.. imagefile [레벨:30]아별 2012-11-07 10428
12 API [펌] 윈도우 메시지(Windows Message) 목록 및 설명.. [레벨:30]아별 2013-03-06 10479
11 엑셀기초 [초보용 팁] 수식을 값으로 만들기 imagefile [레벨:30]아별 2013-05-15 11780
10 엑셀기초 [초보용 팁] 엑셀 명칭 알아보기.. imagefile [7] [레벨:30]아별 2013-05-27 14829
9 엑셀일반 [엑셀에러] stdole32.tlb imagefile [레벨:30]아별 2013-09-27 118903
8 엑셀기초 감사합니다~ [1] 열시히 2014-07-21 13205
7 엑셀기초 엑셀 언어 설정 변경 방법.. imagefile [레벨:30]아별 2015-05-21 14239
6 엑셀VBA [VBA Tips] GetAttr() 디렉토리 속성 확인 에러 (8208을 리턴할 경우) [레벨:30]아별 2016-04-06 9700
5 엑셀일반 Excel 2013에서 중단된 기능 및 변경된 기능 image [레벨:30]아별 2017-01-20 10111
4 엑셀일반 Excel 2010의 중단된 기능 및 수정된 기능 [레벨:30]아별 2017-01-20 13984
3 엑셀기초 엑셀 수식에 메모를 달아보자 [레벨:30]아별 2021-11-08 7442
2 엑셀에러 【 엑셀에러 】 죄송합니다. Excel에 오류가 생겨 제대로 작동할 수 없습니다. Excel을(를) 닫아야 합니다. 에러 처리 [레벨:30]아별 2023-03-28 4967
» 엑셀VBA ChatGPT를 활용한 웹크롤링 [레벨:30]아별 2024-06-28 44