상세 컨텐츠

본문 제목

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

ChatGPT 와 파이썬

by 마리우치 2023. 5. 21. 14:03

본문

반응형

네이버 뉴스 속보 를 스크래핑하기 (웹 크롤링)

일부 웹 사이트에서는 서버 부하나 여러가지 이유로 웹 크롤링, 웹 스크래핑을 제한 또는 차단할 수 있습니다. 이때 파이썬이 아닌 사람이 막는 경우가 있습니다.  이 경우에 크롬 브라우저의 사용자 에이전트를 통해 웹 사이트는 크롬을 사용한 요청을 일반적인 사용자의 요청으로 인식할 수 있습니다. 따라서 일부 웹 사이트는 크롬을 사용한 크롤링 요청을 차단하지 않을 가능성이 높습니다. 그러나 이는 웹 사이트의 정책과 보안 조치에 따라 달라질 수 있으며, 항상 웹 사이트의 이용 약관을 확인하여 크롤링 가능 여부를 확인하는 것이 중요합니다. 이번에는 네이버 뉴스 속보 페이지를 웹 크롤링, 웹 스크래핑 개발을 진행해보겠습니다.  

 

이전에 만든 네이버 뉴스 카테고리의 스크래핑 코드에서는 Beautiful Soup과 같은 HTML 파서만을 사용하여 스크래핑을 수행했습니다. 그러나 일부 웹 페이지는 JavaScript를 사용하거나 웹 스크래핑을 방지하는 기술을 적용하기도 합니다. 이런 경우에는 Selenium 라이브러리를 사용하여 웹 드라이버를 조작하고 페이지를 로드한 후 페이지 소스를 받아오는 방법이 필요합니다. 위에서 제공한 코드는 Selenium 라이브러리를 활용하여 웹 드라이버를 로드하고, 웹 페이지를 열어서 페이지 소스를 받아오는 예시입니다. webdriver.Chrome('chromedriver.exe')는 크롬 드라이버를 로드하는 코드이며, driver.get(url)은 웹 드라이버를 통해 지정한 URL의 페이지를 열어주는 역할을 합니다. 페이지가 로드된 후에는 driver.page_source를 사용하여 현재 페이지의 소스를 받아와서 BeautifulSoup 객체를 생성합니다. 이렇게 웹 드라이버를 사용하여 페이지를 로드하고 소스를 받아오면 JavaScript를 실행한 뒤 동적으로 생성되는 콘텐츠나 AJAX 요청을 포함한 웹 페이지를 스크래핑할 수 있습니다. 그리고 Beautiful Soup을 사용하여 필요한 데이터를 파싱하고 추출할 수 있습니다. 
웹 크롤링을 위해서는 웹 드라이버가 필요하며, 크롬을 사용하는 경우에는 크롬 드라이버를 설치해야 합니다. 크롬 드라이버를 설치하기 위해서는 사용하는 크롬 브라우저의 버전을 확인한 뒤에, 해당 버전과 호환되는 크롬 드라이버를 다운로드 받아야 합니다. 다운로드 받은 드라이버 파일을 현재 스크립트가 위치한 경로에 넣거나, PATH 환경 변수에 등록해야 웹 드라이버를 사용할 수 있습니다. 이렇게 Selenium을 사용하면 자바스크립트 기반의 동적 웹 페이지에서도 스크래핑을 수행할 수 있어서 더 다양한 웹 사이트의 데이터를 수집할 수 있게 됩니다.

 

 

< 웹 스크래핑을 할 네이버 뉴스 속보 페이지 > 





< 네이버 뉴스 속보 >

 

네이버 뉴스 속보 스크래핑 (두번째 A 태그 확인) 

아래 코드에서는  BeautifulSoup를 사용하여 헤드라인 뉴스의 제목, 링크, 언론사, 작성일을 추출하는 예시입니다. 크롬 드라이버를 사용하여 웹 페이지를 로드하고, BeautifulSoup를 사용하여 HTML 요소를 파싱합니다. 그 후, 필요한 정보를 선택하고 출력합니다. 마지막으로 웹 드라이버를 종료합니다. 크롬 드라이버는 자신이 사용하는 크롬 브라우저 버전과 호환되는 드라이버를 다운로드하여 사용해야 합니다. chromedriver.exe 파일을 다운로드한 후 코드에서 해당 파일의 경로를 지정해야 합니다. news.select_one('a')를 사용하여 첫 번째 a 태그를 선택하고 있습니다. 그러나 두 번째 a 태그를 선택하기 위해서는 select를 사용하여 모든 a 태그를 가져와 리스트로 저장한 후, 인덱싱을 통해 두 번째 a 태그를 선택할 수 있습니다. 하지만 문제는 뉴스가 일반적으로 이미지 링크와 기사 타이틀 링크로 구성되어 있다는 점입니다. 따라서 어떤 경우에는 이미지(기사 사진)가 없는 뉴스가 발생할 수 있습니다. 이 경우에는 기존 코드로는 문제가 발생할 수 있습니다. 따라서 아래와 같이 코드를 수정하여 이 문제를 해결할 수 있습니다. 위 코드에서는 먼저 모든 a 태그를 가져온 후, 리스트로 저장합니다. 그리고 리스트의 길이를 확인하여 두 개 이상의 a 태그가 있는지 검사합니다. 만약 두 개 이상의 a 태그가 있는 경우, 두 번째 a 태그를 선택하여 제목과 링크를 추출합니다. 그렇지 않은 경우, 이미지가 없는 경우로 가정하여 해당 뉴스의 기사 타이틀을 선택하고 제목과 링크를 추출합니다. 이렇게 수정된 코드를 사용하면 이미지가 없는 경우에도 예외 처리하여 원하는 결과를 얻을 수 있습니다. 



from selenium import webdriver
from bs4 import BeautifulSoup

# 웹 드라이버 로드
driver = webdriver.Chrome('chromedriver.exe')


# 페이지 로드
driver.get(url)

# 페이지 소스 받아오기
html = driver.page_source

# BeautifulSoup 객체 생성
soup = BeautifulSoup(html, 'html.parser')

# 뉴스 목록 파싱
news_list = soup.select('#main_content .list_body .type06_headline li')

for news in news_list:
    a_tags = news.find_all('a')
    if (len(a_tags) >= 2):
        # 모든 a 태그 선택 후 두 번째 a 태그 선택
        second_a = news.select('a')[1]
        title = second_a.text.strip()
        link = second_a['href'].strip()
    else:
        title = news.select_one('a').text.strip()
        link = news.select_one('a')['href']

    press = news.select_one('.writing').text.strip()
    date = news.select_one('.date').text.strip()

    print(title, "\n", link, "\n", press, "\n", date, "\n\n\n")

# 웹 드라이버 종료
driver.quit()


파이썬 웹 스크래핑 실행 결과

위와 같이 작성된 코드를 실행해보면 아래와 같은 결과로 표시됩니다. 네이버 뉴스 속보에서 제목, 링크, 언론사명, 업데이트 시간 등을 잘 가져왔음을 확인할 수 있습니다.  


 

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

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

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

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

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

 

 

 

 

반응형

지금 뜨고 있는 이야기들

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




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




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



관련글 더보기

댓글 영역