상세 컨텐츠

본문 제목

파이썬 ChatGPT 로 네이버 뉴스 카테고리 웹 크롤링 스크래핑 개발

ChatGPT 와 파이썬

by 마리우치 2023. 5. 13. 17:55

본문

반응형

ChatGPT 로 파이썬 배우기 

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>

 

 

ChatGPT 에게 파이썬 샘플코드를 질문  

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 뉴스 페이징 웹 크롤링 스크래핑 개발 

파이썬) ChatGPT 로 네이버 IT 뉴스 웹 크롤링 스크래핑 개발 

파이썬) ChatGPT 로 네이버 뉴스 카테고리 웹 크롤링 스크래핑 개발 

반응형

지금 뜨고 있는 이야기들

아이폰16 Pro, 자급제, 사전 예약, 네이버 쇼핑 top 50




김포 재개발 대장주 한강 수자인 오브센트




챗GPT GPT-4o 무료로 그림 그리기



관련글 더보기

댓글 영역