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

ChatGPT를 활용한 웹크롤링

엑셀VBA 조회 수 2334 추천 수 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 123732
공지 엑셀일반 엑셀 잘 하는 요령은? _ 엑셀 추천사이트 포함 [2] [레벨:30]아별 2009-11-12 112198
공지 엑셀일반 엑셀 단축키(바로가는키, ShortCut) 총정리입니다. imagefile [247] [레벨:30]아별 2010-08-29 200232
73 엑셀일반 [엑셀에러] stdole32.tlb imagefile [레벨:30]아별 2013-09-27 121878
72 엑셀일반 인쇄 설정 팁.. 머리글, 바닥글에 페이지 번호 설정하는 방법 imagefile [2] [레벨:30]아별 2011-08-03 39550
71 엑셀일반 외부 파일에 연결된(외부 파일 참조) 셀 찾는 방법입니다. imagefile [4] [레벨:30]아별 2011-02-08 37693
70 엑셀일반 [펌] sumproduct 함수를 이용한 다중 조건 계산 imagefile [3] [레벨:30]아별 2008-04-11 31326
69 엑셀일반 엑셀에서 날짜와 시간 계산하는 법 image [레벨:30]아별 2008-06-27 31133
68 엑셀일반 조건부 서식 적용하기 (로또 번호 맞춰 보기) imagefile [4] [레벨:30]아별 2011-04-11 29274
67 엑셀일반 엑셀 표시형식에 대해서 (셀서식, 숫자서식) file [1] [레벨:30]아별 2005-05-13 26667
66 엑셀일반 셀 색상별 합계 구하기( GET.CELL( TYPE,REFERENCE) ) imagefile [레벨:30]아별 2008-03-12 26626
65 엑셀일반 [ XML ] 엑셀로 XML 데이터 다루기.. file [2] [레벨:30]아별 2011-12-26 26202
64 엑셀일반 엑셀에서 날짜 데이터 가공/계산/변환 등 종합 선물 세트. file [2] [레벨:30]아별 2008-06-30 22423
63 엑셀일반 엑셀에서 유용한 단축키들.. [레벨:30]아별 2005-05-23 21822
62 엑셀일반 PDF파일을 EXCEL파일로 변환하기 file [1] [레벨:30]아별 2008-10-24 20719
61 엑셀일반 엑셀에서 줄바꿈 한 셀의 줄간격을 조절하기 [레벨:30]a☆ 2004-11-15 20675
60 엑셀일반 엑셀 2007에서 암호 설정하기 [1] [레벨:30]아별 2010-04-27 20668
59 엑셀일반 두가지 조건을 만족하는 값 찾기 (직급별 연봉) imagefile [레벨:30]아별 2007-01-02 19591
58 엑셀일반 열 방향의 데이터를 행방향 데이터로.. 데이터베이스(DB)형태로 변환하기.. imagefile [2] [레벨:30]아별 2008-08-20 19560
57 엑셀일반 젠쟝 2010.. 사라져 버린 Ctrl+Shift+0 [레벨:30]아별 2011-02-18 19529