본문 바로가기
Python/Python_Crawling

다음 뉴스(제목, 링크, 회사, 카테고리) 크롤링

by Mr.DonyStark 2024. 2. 5.

□ 크롤링 대상

  ○ 언론사

  ○ 카테고리

  ○ 기사제목

  ○ 기사제목 안에 있는 상세페이지 링크 주소

#라이브러리 호출
import requests
from bs4 import BeautifulSoup

#크롤링 사이트 설정
target_url = 'https://news.daum.net/'

#데이터 request 및 get. get한 데이터를 html.paser로 분리
req_data_area = requests.get(target_url, headers = headers)
html_raw_data = req_data_area.text #해당영역에 있는 모든 텍스트 데이터 저장
html_raw_data_parsing = BeautifulSoup(html_raw_data, 'html.parser')

#클래스 이름이 cont_thumb 인것 추출
count_thumb = html_raw_data_parsing.select('.cont_thumb')
for index, v in enumerate(count_thumb):
    index += 1
    for i in v.select('.logo_cp'):   #.cont_thumb 클래스 네임을 가진 태그에 포함된 logo_cp 클래스 네임을 가진 값 반복문
        #예외처리 구문 v.select_one('img')['alt'] 값이 NONE으로 발생되는 TypeError시 값을 -으로 채움
        try:
            news_cmp = v.select_one('img')['alt']
        except TypeError:
            news_cmp = '-'
    for c in v.select('.txt_category'):  
        news_category = c.string  #카테고리에 텍스트가 정확히 있기 떄문에 string 사용
    for t in v.select('.tit_g'):
        news_sm_title = t.select_one('.link_txt').string.strip() #.tit_g 네임을 가진 태그안에 .link_txt를 클래스네임으로 가진 태그의 값을 가져온 후 공백제거
        news_title_link = t.select_one('a')['href']  #.tit_g 네임을 가진 태그안에 포함된 하위태그 a태그의 href 속성값 추출

    print('\n')
    print(f'□ {index} 번째 기사\n\t - 출처 : {news_cmp}\n\t - 카테고리 : {news_category}\n\t - 제목 : {news_sm_title}\n\t - 기사링크 : {news_title_link}')