ChatGPT (챗GPT) 를 이용하여, 파이썬으로 프로그램 개발을 시작합니다. 주로 웹 페이지 스크래핑을 통해서 파이썬을 학습해보려고 하는 데, ChatGPT 가 제공하는 코드를 기반으로 개발을 하더라도, 약간의 파이썬 학습이 되어 있어야 합니다. 파이썬에서 웹 스크래핑을 하려면, requests와 BeautifulSoup 라이브러리를 사용하면 됩니다. requests는 HTTP 요청을 보내고 응답을 받아오는 기능을 제공하며, BeautifulSoup는 HTML 코드를 파싱하여 원하는 데이터를 추출할 수 있는 기능을 제공합니다. 추출한 데이터를 적절하게 가공하여 사용할 수 있습니다. 다만 스크래핑할 때에는 해당 사이트의 이용 약관을 확인하고, 합법적인 방법으로 스크래핑을 수행해야 하며, 코드를 작성할 때에는 사이트의 구조나 HTML 코드가 변경될 가능성이 있으므로 항상 잘 수행이 되지 않고, 웹 사이트의 변경에 따라서 유지보수를 해야할 수 있습니다. 아래와 같이 ChatGPT 가 제공한 코드를 활용해서, 네이버 뉴스 메인 페이지의 뉴스 카테고리를 웹 스크래핑 해보겠습니다.
웹 크롤링과 스크래핑은 모두 웹 페이지에서 데이터를 추출하는 기술이지만, 그 목적과 방식이 다르다. 웹 크롤링은 여러 웹 페이지를 자동으로 탐색하여 그 안에 있는 링크를 따라가며 데이터를 수집하는 과정입니다. 크롤링 봇은 여러 페이지를 자동으로 방문하면서 웹 페이지의 구조와 데이터를 수집하고, 그 데이터를 데이터베이스에 저장하거나 분석하는 등의 용도로 사용되고, 반면 스크래핑은 특정 웹 페이지에서 필요한 데이터를 추출하는 기술로, 웹 페이지의 HTML 코드를 분석하여 필요한 데이터를 추출하는 과정입니다. 스크래핑은 웹 크롤링의 일부로 볼 수 있으며, 크롤링 봇이 자동으로 탐색하는 과정에서 원하는 데이터를 찾아서 추출하는 과정이 포함됩니다. 두 기술 모두 웹 상의 데이터를 수집하는 기술이지만, 크롤링은 데이터베이스를 구축하거나 검색 엔진에서 사용하는 등 대규모 데이터를 수집하는 용도로 사용되고, 스크래핑은 특정 웹 페이지에서 필요한 정보를 추출하는 용도로 사용됩니다.
네이버 뉴스의 언론사별, 정치, 경제, 사회, 생활/문화, IT/과학, 세계 ... 등의 카테고리를 가져와 보겠습니다. 아래 이미지의 빨간색으로 된 부분의 텍스트와 링크(웹 주소)를 가져와서 출력하도록 하겠습니다. html 소스 (또는 페이지 원본) 보기를 하면, 카테고리 부분은 아래와 같은 html 로 구성된 것을 확인할 수 있습니다. 네이버 뉴스의 모든 링크를 가져오는 것이 아니고, 카테고리 부분만 가져올 것이므로, 특정한 특정한 class 안에 들어 있는 link 만 가져와야 합니다. 그래서 아래와 같이 ChatGPT 에게 추가로 질문을 합니다.
네이버 뉴스의 html 중 카테고리에 해당하는 부분 <li class="Nlist_item is_active"><a href=" https://news.naver.com/?viewType=pc " class="Nitem_link" role="menuitem" aria-selected="true" onclick="nclk(event,'lnb.pcmedia','','');"><span class="Nitem_link_menu">언론사별</span></a></li> <li class="Nlist_item"><a href=" https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=100 " class="Nitem_link" role="menuitem" aria-selected="false" onclick="nclk(event,'lnb.pol','','');"><span class="Nitem_link_menu">정치</span></a></li> <li class="Nlist_item"><a href=" https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=101 " class="Nitem_link" role="menuitem" aria-selected="false" onclick="nclk(event,'lnb.eco','','');"><span class="Nitem_link_menu">경제</span></a></li> <li class="Nlist_item"><a href=" https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=102 " class="Nitem_link" role="menuitem" aria-selected="false" onclick="nclk(event,'lnb.soc','','');"><span class="Nitem_link_menu">사회</span></a></li> <li class="Nlist_item"><a href=" https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=103 " class="Nitem_link" role="menuitem" aria-selected="false" onclick="nclk(event,'lnb.lif','','');"><span class="Nitem_link_menu">생활/문화</span></a></li> |
https://chat.openai.com/ 에 가입을 하여, 아래와 같은 질문을 하면 샘플코드를 알려줍니다.
Q. 일반적인 웹 페이지를 스크래핑하는 파이썬 샘플코드를 알려줘
A. ChatGPT 가 아래와 같은 파이썬 샘플코드를 제공했습니다.
import requests
from bs4 import BeautifulSoup
# 스크래핑할 페이지의 URL
# requests를 사용하여 페이지의 HTML 코드 가져오기
response = requests.get(url)
# BeautifulSoup을 사용하여 HTML 코드 파싱하기
soup = BeautifulSoup(response.text, 'html.parser')
# 파싱된 HTML에서 원하는 데이터 추출하기
title = soup.title.text
paragraphs = [p.text for p in soup.find_all('p')]
# 추출된 데이터 출력하기
print(f'Title: {title}')
print('Paragraphs:')
for p in paragraphs:
print(f'- {p}')
|
Q. class 안에 들어있는 link 와 그 텍스트 를 추출하는 샘플코드
A. ChatGPT 가 아래와 같은 파이썬 샘플코드를 제공했습니다.
import requests
from bs4 import BeautifulSoup
# 스크래핑할 페이지의 URL
# requests를 사용하여 페이지의 HTML 코드 가져오기
response = requests.get(url)
# BeautifulSoup을 사용하여 HTML 코드 파싱하기
soup = BeautifulSoup(response.text, 'html.parser')
# 클래스가 'example-class'인 요소에서 링크와 함께 텍스트 추출하기
for element in soup.find_all(class_='example-class'):
link = element.find('a')
if link is not None:
print(link.get('href'), link.get_text())
|
위 코드에서는 find_all 메소드로 클래스가 example-class인 요소를 모두 찾은 후, 각각의 요소에서 find 메소드를 사용하여 내부의 a 태그를 찾습니다. 그리고 link 변수가 None이 아니면, 해당 a 태그에서 href 속성과 get_text() 메소드를 사용하여 링크 텍스트를 추출하여 함께 출력합니다. 이렇게 하면 클래스나 span 안에 들어있는 링크와 함께 텍스트를 추출할 수 있습니다. 이제 ChatGPT 에서 알려준 파이썬 코드와 네이버 뉴스 메인 페이지 소스를 참고해서, url 과 class 명칭을 변경한 코드는 아래와 같습니다.
import requests
from bs4 import BeautifulSoup
# 스크래핑할 페이지의 URL
# requests를 사용하여 페이지의 HTML 코드 가져오기
response = requests.get(url)
# BeautifulSoup을 사용하여 HTML 코드 파싱하기
soup = BeautifulSoup(response.text, 'html.parser')
# 파싱된 HTML에서 원하는 데이터 추출하기
title = soup.title.text
# 클래스가 'example-class'인 요소에서 a 태그 추출하기
for element in soup.find_all(class_='Nlist_item'):
link = element.find('a')
if link is not None:
print(link.get('href'), link.get_text())
|
위와 같이 작성된 코드를 실행해보면 아래와 같은 결과로 표시됩니다. 네이버 뉴스의 카테고리명과 링크를 잘 갖고 왔음을 확인할 수 있습니다.
파이썬) ChatGPT 로 네이버 뉴스 속보 웹 크롤링 스크래핑 개발
파이썬) ChatGPT 로 네이버 IT 뉴스 페이징 웹 크롤링 스크래핑 개발
구글 서치 콘솔 (티스토리 쉽게 등록하기) (3) | 2023.05.28 |
---|---|
ChatGPT 와 OpenAI 소개 (0) | 2023.05.22 |
파이썬 ChatGPT 로 네이버 뉴스 속보 웹 크롤링 스크래핑 개발 (0) | 2023.05.21 |
파이썬 ChatGPT 로 네이버 IT 뉴스 페이징 웹 크롤링 스크래핑 개발 (0) | 2023.05.16 |
파이썬 ChatGPT 로 네이버 IT 뉴스 웹 크롤링 스크래핑 개발 (0) | 2023.05.14 |
챗GPT 무료 와 챗GPT 유료 차이점과 GPT-4 무료 사용법
챗GPT 어플, 안드로이드 앱 설치와 사용법, GPT-4o 음성 대화, 무료 사용법
AI 기반 검색 엔진, ChatGPT의 SearchGPT와 구글의 비교
챗GPT로 하루 100통 이메일 자동 작성하는 비법 공개
경제 지표 시계열 분석을 통한 정책 제언, 파이썬을 활용한 GDP 성장률 예측과 그 활용법
댓글 영역