본문 바로가기
코딩 연습/파이썬 크롤링

다음 뉴스 기사 제목 본문 크롤링 후 텍스트 저장

by good4me 2022. 6. 1.

goodthings4me.tistory.com

[파이썬 크롤링] 네이버 지식인에 올라온 질문 '다음 랭킹 뉴스 기사 제목 본문 크롤링 후 텍스트 파일에 저장하는 법'에 대해 파이썬으로 작성해보았다.

 

 

다음 랭킹 뉴스 기사 제목, 본문 크롤링 후 텍스트 파일로 저장

 

[파이썬 소스 코드]

import requests
from bs4 import BeautifulSoup
import os


def daum_news():

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}
    url = f'https://news.daum.net/'

    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        # print(response.text)
        soup = BeautifulSoup(response.text, 'html.parser')
        lis = soup.find('ul', class_='list_newsissue').find_all('li')
        print(len(lis))  # 20

        for li in lis:
            a_tag = li.select_one('div > div > strong > a')['href']
            title = li.select_one('div > div > strong > a').text.strip().replace('  ', '')
            print(a_tag, title)

            res = requests.get(a_tag, headers=headers)
            soup2 = BeautifulSoup(res.text, 'html.parser')
            summary = ''
            content = ''
            try:
                summary = soup2.find('strong', {'class': 'summary_view'}).text.strip()
                print(summary)
            except:
                summary = '요약 없음'
                pass
            try:
                content = soup2.find('div', id='harmonyContainer').text.strip()
                print(content)
            except:
                content = "기사 본문 없음"
                continue
            
            contents = '[기사 제목] ' + title + '\n\n' + summary + '\n\n' + content

            ## 기사 내용 저장
            folder_name = f'./daum_news'
            file_name = title[:15].strip()

            # 파일명에서 특수문자 제거
            special_char = '\/:*?"<>|'
            for c in special_char:
                if c in file_name:
                    file_name = file_name.replace(c, 'x')

            if not os.path.exists(folder_name):
                os.makedirs(folder_name)

            with open(folder_name + '/' + file_name + '.txt', 'w', encoding='utf-8') as f:
                f.write(contents)

            # break
    else :
        print(response.status_code)

daum_news()

저장할 폴더를 'daum_news'로 만들고 파일명은 기사 제목에서 15자까지 추출하여 사용하며, 제목에 특수문자가 있을 경우 저장이 안되는 오류를 방지하기 위해 특수문자를 제거해서 처리함

 

good4me.co.kr

 

[실행 결과]

20
https://v.daum.net/v/20220601124604173 지상파 "대선 때 정확성 봤지? 이번 개표방송은 더 정확하게!"
[6.1 지방선거]MBC, KBS, SBS 선거개표 방송 경쟁M "출구서 당선확률", 
K "AR존 운영" S "3면+LED월"
한국방송 제공


선거날만 되면 방송사들은 또 다른 선거를 치른다. 바로 개표방송 대결. 플랫폼이 다양해면서 시청자를 붙들려는 방송사의 경쟁도 더욱 치열해 
지고 있다. 방송사들은 8~9개월 전부터 선거방송기획팀을 조직해 프로그
램 구성에서 그래픽(CG)까지 모든 것을 체계적으로 준비한다. <에스비에
스>가 2017년 대통령 선거 때 미국드라마 <왕좌의 게임>에서 아이디어를
 얻은 결과물이 화제를 모은 뒤부터는 개표방송에 거는 시청자의 기대도
 점점 높아지고 있다.
오늘(1일) 실시된 ‘제8회 전국동시 지방선거’ 개표방송은 지난 대선에  
이은 방송사들의 2차전이다. 이재명·안철수 전 대선 후보가 출마하는 등
 여느 때보다 관심이 높아서 방송사들도 특히 공을 들였다.
이번 선거방송을 요약하자면 3사 모두 “정확성에 대한 자신”을 강조하고
 있다. <문화방송>(MBC)은 “정통”, <한국방송>(KBS)는 “명품”, <에스비 
에스>(SBS)는 “신박함”으로 구분 짓는 차이는 있지만, 지난 대선 때보다
도 “더 빠르고 정확해졌다”고 입을 모은다. 지난 대선 때 인정받은 지상
파 출구조사의 정확성과 신뢰성을 이번 선거방송에서 활용한 듯하다. < 
문화방송> 쪽은 “지난 3월9일 진행된 대통령 선거방송 이후 3개월이 채 
안 되는 짧은 기간 동안 역량을 총동원했다”고 말했다.

.
.

 

 

 

댓글