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

ChatGPT를 활용한 웹크롤링

엑셀VBA 조회 수 39 추천 수 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 93632
공지 엑셀일반 엑셀 잘 하는 요령은? _ 엑셀 추천사이트 포함 [2] [레벨:30]아별 2009-11-12 82366
공지 엑셀일반 엑셀 단축키(바로가는키, ShortCut) 총정리입니다. imagefile [247] [레벨:30]아별 2010-08-29 159228

엑셀VBA ChatGPT를 활용한 웹크롤링

  • [레벨:30]아별
  • 2024-06-28
  • 조회 수 39

엑셀에러 【 엑셀에러 】 죄송합니다. Excel에 오류가 생겨 제대로 작동할 수 없습니다. Excel을(를) 닫아야 합니다. 에러 처리

  • [레벨:30]아별
  • 2023-03-28
  • 조회 수 4964

엑셀일반 해당 날짜가 그 달에서 몇번째 주인지를 알기 위한 수식..

  • [레벨:30]a☆
  • 2005-07-25
  • 조회 수 6959

엑셀일반 (엑셀양식) 특정일 기준 인원현황 만들기.xls file

  • [레벨:30]아별
  • 2007-11-12
  • 조회 수 7209

엑셀일반 MS OFFICE 2007 제공 서식 파일 file

  • [레벨:30]아별
  • 2008-11-21
  • 조회 수 7332

엑셀일반 엑셀 툴바 활용하기. imagefile

  • [레벨:30]a☆
  • 2005-06-09
  • 조회 수 7423

엑셀일반 엑셀에서 입력사항을 특정 목록으로 한정하기.. 유효성 검사 file

  • [레벨:30]아별
  • 2004-10-15
  • 조회 수 7428

엑셀기초 엑셀 수식에 메모를 달아보자

  • [레벨:30]아별
  • 2021-11-08
  • 조회 수 7440

엑셀일반 엑셀에서 '카메라'.. 결제란 같이 셀의 폭과 열의 갯수가 본문과 많이 차이날때

  • [레벨:30]a☆
  • 2004-11-08
  • 조회 수 7669

엑셀일반 베일벗은 오피스 2010 둘러보기 movie

  • [레벨:30]아별
  • 2009-07-19
  • 조회 수 7690

엑셀일반 행 기준 데이터를 열 기준 데이터로 바꾸기.. 행열 바꾸기.. imagefile

  • [레벨:30]아별
  • 2008-04-07
  • 조회 수 7828

엑셀일반 엑셀 도구모음(툴바) 구성 저장하기

  • [레벨:30]a☆
  • 2006-01-17
  • 조회 수 8037

엑셀일반 엑셀의 셀에 사용자가 지정한 색으로 채워넣기.

  • [레벨:30]아별
  • 2006-11-02
  • 조회 수 8093

엑셀일반 엑셀의 서식에 대해서 간단히 정리하기

  • [레벨:30]아별
  • 2007-01-03
  • 조회 수 8255

엑셀일반 표 형식의 DATA를 DB형태로 바꾼 뒤, 피벗 테이블 활용하기. imagefile [1]

  • [레벨:30]아별
  • 2007-05-29
  • 조회 수 8295

엑셀일반 리본 메뉴, 도움말 및 기타 Microsoft Office 바로 가기 키 image

  • [레벨:30]아별
  • 2009-09-22
  • 조회 수 8416

엑셀일반 Excel 바로 가기 및 기능 키 image

  • [레벨:30]아별
  • 2009-09-22
  • 조회 수 8432

엑셀일반 배열 수식을 이용한 최근 판가 갖고 오기 imagefile

  • [레벨:30]아별
  • 2009-07-29
  • 조회 수 8466

엑셀일반 셀병합 단축키 지정하기..

  • [레벨:30]a☆
  • 2005-02-28
  • 조회 수 8503

엑셀일반 [엑셀 팁] 메모 서식 변경하기

  • [레벨:30]a☆
  • 2005-01-13
  • 조회 수 8534