본문 바로가기
프로그래밍/python

파이썬 네이버 뉴스의 IT/과학 헤드라인 뉴스 크롤링 후 출력

by 마루의 일상 2024. 4. 23.
728x90
반응형

네이버 뉴스의 헤드라인 뉴스 목록을 크롤링하기 위해서는 웹페이지의 HTML 구조를 분석하고, 필요한 정보를 추출하는 작업이 필요합니다.

주로 Requests와 BeautifulSoup을 사용하여 이 작업을 수행합니다.

아래는 네이버 뉴스의 헤드라인 뉴스 목록을 크롤링하는 예시 코드입니다.

import requests
from bs4 import BeautifulSoup

def get_naver_news_headlines():
    url = 'https://news.naver.com/section/105' #IT/과학의 헤드라인 뉴스입니다.
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }  # User-Agent 헤더를 추가하여 웹 페이지 요청을 보냅니다.

    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'html.parser')

    headlines = []

    # 헤드라인 뉴스를 포함하는 태그들을 찾습니다.    
    for element in soup.select('.sa_text_strong'):
     print(element.text)  

    return headlines

# 헤드라인 뉴스 목록을 가져와 출력합니다.
headlines = get_naver_news_headlines()

 

태그 찾기: BeautifulSoup 객체에서 find() 또는 find_all() 메서드를 사용하여 원하는 태그를 찾습니다.

  • find(): 조건에 맞는 첫 번째 태그를 반환합니다.
tag = soup.find('태그명')

 

  • find_all(): 조건에 맞는 모든 태그를 리스트로 반환합니다.
tags = soup.find_all('태그명')

 

조건 지정: 태그를 찾을 때는 보통 태그 이름뿐만 아니라 클래스, id 등의 다양한 조건을 사용합니다.

  • 태그 이름: 해당 태그의 이름을 사용하여 찾습니다

soup.find_all('div')  # 모든 <div> 태그 찾기

 

  • 클래스: class 속성을 사용하여 찾습니다
soup.find_all(class_='class_name')  # class가 'class_name'인 모든 태그 찾기

 

  • id: id 속성을 사용하여 찾습니다
soup.find_all(id='element_id')  # id가 'element_id'인 모든 태그 찾기

 

추가적인 조건 지정: 위의 예시에서는 단순한 태그 이름, 클래스, id를 사용하여 태그를 찾았지만, 더 복잡한 조건도 사용할 수 있습니다. 예를 들어, 속성의 값이 특정한 패턴을 따르는 태그를 찾을 수도 있습니다.

 

soup.find_all('a', href=True)  # href 속성을 갖고 있는 모든 <a> 태그 찾기

 

soup.select() 메서드는 BeautifulSoup에서 CSS 선택자를 사용하여 요소를 선택하는 기능을 제공합니다. CSS 선택자를 사용하면 더 유연하고 정확하게 원하는 요소를 선택할 수 있습니다.

select() 메서드는 선택자에 해당하는 모든 요소를 리스트로 반환합니다. 예를 들어, 모든 <a> 태그를 선택하려면 soup.select('a')를 사용할 수 있습니다.

 

soup.select('a')  # 모든 <a> 태그 선택
soup.select('.class_name')  # class가 'class_name'인 요소 선택
soup.select('div a')  # <div> 요소 아래의 모든 <a> 태그 선택
soup.select('[href]')  # href 속성을 갖는 모든 요소 선택
soup.select('[href="https://naver.com"]')  # href 속성 값이 'https://naver.com'인 모든 요소 선택
728x90
반응형