지금까지 개발한 네이버 뉴스는 페이징에 대한 부분이 포함되어 있지 않았습니다. 네이버의 각 카테고리별 뉴스는 시간이 지나면서 페이징이 되는 데, 이전의 뉴스까지 스크래핑을 하려면 페이징을 할 수 있는 기능이 추가되어야 합니다. 아래의 네이버 뉴스 화면에서 2페이지를 누르면, 페이지 번호가 들어간 링크(URL) 를 확인할 수 있습니다. 이 링크를 이용하여, ChatGPT 에게 파이썬 코드를 알려달라고 하겠습니다. 이 포스트에서 개발할 사항은 오늘의 IT/과학 카테고리 뉴스에서 1페이지~5페이지 뉴스에 대한 정보를 스크래핑하는 것입니다.
네이버 뉴스 IT/과학의 IT 일반 뉴스 (하단부에 페이지가 있음) |
네이버 뉴스의 html 중 각 뉴스에 해당하는 부분 |
https://chat.openai.com/ 에 가입을 하여, 아래와 같은 질문을 하면 샘플코드를 알려줍니다.
Q. https://news.naver.com/main/list.naver?mode=LS2D&mid=shm&sid2=230&sid1=105&date=20230516&page=2
이 페이지를 오늘, 1페이지부터 5페이지까지 스크래핑하는 파이썬 코드, 일자를 현재일로 변경함
A. ChatGPT 가 아래와 같은 파이썬 샘플코드를 제공했습니다. 이 코드는 네이버 뉴스의 특정 섹션에 대해 특정 날짜에 대한 스크래핑을 수행하는 파이썬 코드입니다. 먼저 datetime 모듈을 사용하여 현재 날짜를 가져오고, 가져온 날짜를 'YYYYMMDD' 형식의 문자열로 변환합니다. str_page와 end_page 변수를 사용하여 스크래핑할 페이지의 범위를 지정합니다. range 함수를 사용하여 str_page부터 end_page까지 반복하면서 해당 페이지의 HTML을 가져옵니다. (for 문) 가져온 HTML 데이터를 BeautifulSoup 모듈을 사용하여 파싱합니다. select 메소드를 사용하여 HTML에서 원하는 정보를 선택합니다. 이 경우 div.list_body > ul > li로 선택하여 해당 페이지의 기사 목록을 가져옵니다. 가져온 기사 목록에서 하나씩 루프를 돌며 기사 제목, 링크, 출처, 날짜 정보를 추출합니다. 추출한 정보를 출력합니다. 추가로, 코드에서 headers 변수를 이용하여 User-Agent 정보를 전송하여 웹 스크래핑을 할 때, 웹사이트에서 웹스크래핑을 막지 않도록 하는데 도움을 주는 것을 볼 수 있습니다. ChatGPT 에서 제공한 코드를 조금 수정하여, 아래와 같이 코드를 완성하였습니다.
import datetime
import requests
from bs4 import BeautifulSoup
# 오늘 날짜 계산
today = datetime.date.today() # 오늘 날짜 계산
today_str = today.strftime('%Y%m%d') # 날짜를 문자열로 변경
# 스크래핑할 페이지 범위 지정
str_page = 1
end_page = 5
# 스크래핑한 뉴스 개수 초기화
idx = 0
# 페이지 범위 만큼 스크래핑
for page in range(str_page, end_page + 1):
# 스크래핑할 페이지 url 생성
url = f'https://news.naver.com/main/list.naver?mode=LS2D&mid=shm&sid1=105&sid2=230&date={today_str}&page={page}'
# 스크래핑에 필요한 header 지정
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 스크래핑할 페이지 요청
res = requests.get(url, headers=headers)
# 요청 실패시 예외처리
try:
res.raise_for_status()
except Exception as e:
print(f"페이지 요청에 실패하였습니다. {e}")
break
# html 파싱
soup = BeautifulSoup(res.text, 'html.parser')
# 기사 목록 선택
articles = soup.select('div.list_body > ul > li')
# 기사 개수만큼 반복문 수행
for article in articles:
idx += 1 # 스크래핑한 뉴스 개수 카운팅
# 기사 제목, 링크 추출
a_tags = article.find_all('a')
if (len(a_tags) >= 2):
# 모든 a 태그 선택 후 두 번째 a 태그 선택
second_a = article.select('a')[1]
title = second_a.text.strip()
link = second_a['href'].strip()
else:
title = article.select_one('a').text.strip()
link = article.select_one('a')['href']
# 언론사, 날짜 추출
press = article.select_one('.writing').text.strip()
date = article.select_one('.date').text.strip()
# 결과 출력
print(title, "\n", link, "\n", press, "\n", date, "\n\n\n")
# 한 페이지 스크래핑 후 결과 출력
print(idx, " 개의 뉴스를 스크래핑하였습니다. \n", "="*70, "\n")
|
위와 같이 작성된 코드를 실행해보면 아래와 같은 결과로 표시됩니다. 네이버 뉴스의 링크를 잘 갖고 왔음을 확인할 수 있습니다.
파이썬) ChatGPT 로 네이버 뉴스 속보 웹 크롤링 스크래핑 개발
파이썬) ChatGPT 로 네이버 IT 뉴스 페이징 웹 크롤링 스크래핑 개발
구글 서치 콘솔 (티스토리 쉽게 등록하기) (3) | 2023.05.28 |
---|---|
ChatGPT 와 OpenAI 소개 (0) | 2023.05.22 |
파이썬 ChatGPT 로 네이버 뉴스 속보 웹 크롤링 스크래핑 개발 (0) | 2023.05.21 |
파이썬 ChatGPT 로 네이버 IT 뉴스 웹 크롤링 스크래핑 개발 (0) | 2023.05.14 |
파이썬 ChatGPT 로 네이버 뉴스 카테고리 웹 크롤링 스크래핑 개발 (3) | 2023.05.13 |
챗GPT 무료 와 챗GPT 유료 차이점과 GPT-4 무료 사용법
챗GPT 어플, 안드로이드 앱 설치와 사용법, GPT-4o 음성 대화, 무료 사용법
AI 기반 검색 엔진, ChatGPT의 SearchGPT와 구글의 비교
챗GPT로 하루 100통 이메일 자동 작성하는 비법 공개
경제 지표 시계열 분석을 통한 정책 제언, 파이썬을 활용한 GDP 성장률 예측과 그 활용법
댓글 영역