ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발자 아니어도 가능! 챗gpt로 웹크롤링 하는 방법 (1)뉴스 모니터링 자동화
    카테고리 없음 2024. 6. 5. 14:16

    개발자 아니어도 파이썬 설치부터 코드 작성까지 챗gpt로 완전 가능!

    챗gpt 활용한 웹크롤링, 뉴스 모니터링 자동화 기초 세팅 방법

     

    브랜드 마케터라면 데일리로 진행하는 모니터링 업무, 꼭 마케터가 아니더라도 내가 필요한 정보를 수집해야 할 때 일일이 검색을 하지 않아도 챗gpt를 통해 웹크롤링을 자동화하는 방법이 있습니다. 개발자가 아닌데 가능하냐구요? 파이썬 코드를 하나도 몰라도 완전 가능합니다. 저도 프로그램 개발에 관해서는 1도 지식이 없는 문과생이거든요. 

     

    지금부터 챗gpt를 활용해 파이썬 코드를 작성해서 웹크롤링 프로그램을 구축하는 초기 세팅 단계에 대해 설명 드릴게요. 실제 업무에 적용하고 있는 네이버 뉴스 모니터링 자동화 프로그램을 중심으로 설명하겠습니다. 참고로 네이버 뉴스는 크롤링이 가능하지만, 구글이나 일부 커뮤니티 등에서는 크롤링이 어려운 점 참고해주세요. 

     

    우선 네이버 뉴스 자동화 모니터링 프로그램을 만들기 위해서는 몇 가지 단계를 따라야 합니다. 첫 번째 단계로 파이썬을 설치하고 필요한 라이브러리를 설치해야 합니다. 파이썬 설치 방법부터 시작하겠습니다.

    1. 파이썬 설치하기

    1. 파이썬 다운로드: Python 공식 사이트에 접속하여 최신 버전을 다운로드합니다.
    2. 설치: 다운로드한 파일을 실행하여 설치를 진행합니다. 설치할 때 "Add Python to PATH" 옵션을 체크하는 것을 잊지 마세요.

    파이썬 설치를 완료했다면 다음 단계로 넘어가겠습니다. 다음은 웹크롤링과 구글 시트 업데이트를 위한 라이브러리를 설치하는 방법입니다. 구글 시트 업데이트 기능은 왜 필요하냐구요? 파이썬에서 수집된 결과를 자동으로 문서화하기 위해서입니다. 이 과정에는 구글 클라우드에서 API 권한을 부여 받아야 하는데, 조금 복잡한 과정이 필요해 해당 내용은 다음 포스팅에서 조금 더 상세하게 설명 드리겠습니다. 우선은 원하는 뉴스를 모니터링 하는 프로그램 구축하는 것부터 이어 설명 드릴게요. 

    2. 필요한 라이브러리 설치하기

    이미지 출처: Medium

     

    웹크롤링을 위해서는 requests와 BeautifulSoup 라이브러리가 필요하고, 구글 시트에 데이터를 업데이트하기 위해서는 gspread와 oauth2client 라이브러리가 필요합니다. 어차피 설치해야 하는 내용이니 다음 명령어를 통해 한 번에 설치해주세요. 명령 프롬프트는 윈도우 검색창에 '명령 프롬프트' 또는 'cmd' 를 검색하면 됩니다. 창이 열리면 아래의 명령어를 입력해주세요.

     

    "pip install requests beautifulsoup4 gspread oauth2client"

     

    라이브러리 설치가 완료됐다는 출력값이 나오면, 웹크롤링 스크립트를 작성할 준비가 완료된 것입니다. 여기까지 잘 따라오셨나요? 다음으로 넘어갈게요,.

     

    3. 네이버 뉴스 크롤링 스크립트 작성하기

    우선, 네이버 뉴스에서 데이터를 가져오는 부분을 살펴보겠습니다. 이 단계에서는 네이버 뉴스 검색 결과 페이지의 HTML 데이터를 가져와서, 뉴스 제목과 링크를 추출하게 되는데요. 저 같은 경우는 인스타그램 관련 뉴스를 모니터링 하고 싶어서 네이버 뉴스에 '인스타그램'을 검색해서 URL을 입력했습니다.

     

    Step 1: 네이버 뉴스 페이지에서 데이터 가져오기

    1. 네이버 뉴스 검색 결과의 URL을 챗gpt에게 알려주면,
    2. BeautifulSoup을 사용하여 HTML을 파싱하고, 필요한 뉴스를 추출하도록 챗gpt가 코드를 작성해줍니다.

    개발 단계에서 코드를 작성하려면 뉴스 영역의 제목이 어떤 부분에 위치하는지 HTML을 확인해서 코드에 반영해야 된다고 알고 있는데, 챗gpt에게 웹크롤링 하고자 하는 URL을 알려주면 이미 설치한 Beautiful Soup을 활용해 뉴스 검색 결과 페이지의 HTML 데이터를 자동으로 가져와 뉴스 제목과 링크를 추출하도록 코드를 작성해줍니다.

     

    챗gpt가 작성해준 코드는 복사해서 파이썬에 붙여넣으면 되는데, 간혹 파이썬에서 들여쓰기 문제가 발생해 오류가 나는 경우가 있습니다. 이때 직접 타이핑하는 대신 파이썬 스크립트 파일로 저장하여 실행하는 방법을 권장드립니다. 이렇게 하면 들여쓰기 문제를 피할 수 있습니다.

    파이썬 스크립트를 .py 파일로 저장 후 명령 프롬프트 통해 실행

    1. 텍스트 편집기 사용하기: 메모장, VS Code, PyCharm 등 텍스트 편집기를 열어주세요. 저는 간편하게 메모장을 활용했습니다.
    2. 코드 입력하기: 작성된 코드를 텍스트 편집기(ex.메모장)에 입력하세요.
    3. 파일 저장하기: 파일을 저장할 때 "naver_news.py"와 같이 확장자명까지 입력해서 저장하시면 됩니다. 저장할 때에 파일 형식은 "모든 파일"로 지정하고, 인코딩은 "UTF-8"로 설정되어야 합니다. 저장 위치는 나중에 쉽게 찾을 수 있는 폴더로 선택하세요.
    4. 명령 프롬프트(또는 터미널) 열기: 윈도우에서는 cmd를, Mac이나 Linux에서는 터미널을 열어주세요.
    5. 스크립트 실행하기:
      • 명령 프롬프트에서 파일이 저장된 폴더로 이동합니다

    C드라이브가 아닌 D드라이브에 파일을 저장하셨다면 "cd /d D:\저장경로" 를 입력하셔야 파일을 찾을 수 있습니다. 개발에 무지한 저는 위 프롬프트에서 "C:"를 "D:"로 입력하면 되는 줄 알고 아래와 같이 입력했다가 오류가 발생했어요.

     

    챗gpt가 작성해준 파이썬 코드로 '인스타그램' 뉴스가 크롤링 되었습니다. 그런데, 뉴스 모니터링 시 필요 없는 내용들이 보입니다. "아이브 안유진", "노소영 저격", "자숙한다던 유재환" 등 방송/연예 관련된 기사는 모니터링 대상이 아니거든요. 그리고, 중복된 기사가 많이 보였습니다. 그래서 챗gpt에게 아래와 같이 요청했습니다.

     

    1. 연예/방송/연애 관련 기사는 제외하고 싶어. 예를 들면, '나는 솔로', '열애설', '결혼설', '김다현'과 같이 방송 프로그램 명칭이나 연예인 이름이 노출된 기사는 제외하고 싶어.

    2. 중복된 기사를 제외할 수 있을까?

     

    필터링 조건 추가 및 중복 기사 제외

    특정 키워드를 제외하고, 이미 수집된 기사의 링크가 중복되지 않도록 필터링 해달라는 요청에 챗gpt가 "difflib 모듈"을 사용하여 제목의 유사도를 측정하고, 유사도가 일정 수준 이상인 경우 중복으로 간주하여 제외하는 방법을 적용해줬습니다. 키워드 제외의 경우, 특정 범주/카테고리를 지정할 수는 없어서 일일이 수동으로 필터링 키워드 목록을 업데이트 해야합니다. (*혹시 원하는 범주의 키워드를 지정할 수 있는지는 추가적으로 계속 찾아 보고 있는데, 아직까지는 발견을 못했어요.)

    위의 수정된 코드를 반영하자 아래와 같이 마케팅 관련 내용만 수집이 가능했습니다. 중복된 기사도 많이 줄어 들었구요. (다만 조금 더 고도화가 필요할 것 같아 코드를 지속적으로 수정하며 업데이트 중입니다.)

    위 내용에 추가해서 자동화 모니터링 결과를 정기적으로 수집하고 싶어 "3시간 간격으로 자동화 모니터링을 수행하고 싶다"고 챗gpt에게 요청했습니다. 그러자 "Python의 time 모듈과 스케줄러를 사용하여 주기적으로 스크립트를 실행할 수 있습니다. 여기서는 time.sleep 함수를 사용하여 간단히 구현해 보겠습니다."라고 파이썬 코드 최하단에 아래와 같이 코드를 입력해주더라구요. 

     

    코드 설명

    1. 함수 정의: crawl_news 함수는 네이버 뉴스에서 기사를 크롤링하고 필터링된 결과를 출력합니다.
    2. 메인 루프: if __name__ == "__main__": 블록 내에서 무한 루프를 사용하여 3시간 간격으로 crawl_news 함수를 호출합니다.
    3. 대기 시간 설정: time.sleep(3 * 3600)을 사용하여 3시간(10800초) 동안 대기합니다.

     

    이렇게 해서 3시간 간격으로 제가 원하는 키워드를 포함 또는 제외한 "인스타그램" 관련 뉴스를 정기적으로 웹크롤링 할 수 있게 됐습니다. 모니터링을 하면서 일일이 페이지를 넘겨가며 확인하는 것보다 시간이 많이 단축돼서 트렌드 리포트를 작성하는 데에 많은 도움을 받고 있습니다. 뉴스 모니터링 뿐만 아니라 특정 커뮤니티에서 원하는 키워드를 포함한 게시물을 크롤링 할 수도 있어서 다방면으로 활용 가능할 것 같아요.

     

    여기에 추가해서 뉴스 제목, 링크 외에도 뉴스 기사를 요약하는 기능도 추가 가능한데, 이 부분은 구글시트 API를 활용해 문서화 하는 작업을 설명 드릴 때에 추가로 소개 드리겠습니다. 챗gpt를 활용한 웹크롤링 작업은 어렵지 않기 때문에 업무 효율성 강화를 위해 꼭 한 번 사용해보시길 추천 드립니다.

Designed by Tistory.