상세 컨텐츠

본문 제목

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

ChatGPT 와 파이썬

by 마리우치 2023. 5. 16. 19:20

본문

반응형

네이버 IT 뉴스 를 페이징하여, 스크래핑하기 (웹 크롤링)

지금까지 개발한 네이버 뉴스는 페이징에 대한 부분이 포함되어 있지 않았습니다. 네이버의 각 카테고리별 뉴스는 시간이 지나면서 페이징이 되는 데, 이전의 뉴스까지 스크래핑을 하려면 페이징을 할 수 있는 기능이 추가되어야 합니다. 아래의 네이버 뉴스 화면에서 2페이지를 누르면, 페이지 번호가 들어간 링크(URL) 를 확인할 수 있습니다.  이 링크를 이용하여, ChatGPT 에게 파이썬 코드를 알려달라고 하겠습니다.   이 포스트에서 개발할 사항은 오늘의 IT/과학 카테고리 뉴스에서 1페이지~5페이지 뉴스에 대한 정보를 스크래핑하는 것입니다.  



네이버 뉴스 IT/과학의 IT 일반 뉴스 (하단부에 페이지가 있음)

 

네이버 뉴스의 html 중 각 뉴스에 해당하는 부분 

 

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

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 에서 제공한 코드를 조금 수정하여, 아래와 같이 코드를 완성하였습니다. 

네이버 IT 뉴스 를 페이징하여, 스크래핑하기 완성된 코드 



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_pageend_page + 1):
    # 스크래핑할 페이지 url 생성
    
    # 스크래핑에 필요한 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(urlheaders=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")



네이버 IT 뉴스 를 페이징하여, 스크래핑한 결과 

위와 같이 작성된 코드를 실행해보면 아래와 같은 결과로 표시됩니다. 네이버 뉴스의 링크를 잘 갖고 왔음을 확인할 수 있습니다. 


< 다른 웹 크롤링, 스크래핑 개발 > 

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

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

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

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

반응형

지금 뜨고 있는 이야기들

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




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




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



관련글 더보기

댓글 영역