코딩코딩코딩

파이썬 네이버 뉴스 일일 기사 크롤링 - 1 본문

파이썬/텍스트마이닝

파이썬 네이버 뉴스 일일 기사 크롤링 - 1

hanshow113 2020. 7. 17. 15:36

네이버 뉴스 키워드 일일 기사 크롤링

- 키워드와 날짜를 지정하고 크롤링하는 함수를 만들고 해당 검색의 페이지가 끝날 때까지 크롤링 진행

 

제목과 요약 내용만 크로링 할 것임

 

import pandas as pd
import numpy as np
import feedparser
from bs4 import BeautifulSoup as bs
import urllib
import urllib.request as req
import requests
from konlpy.tag import Kkma, Okt, Komoran
okt = Okt()
from konlpy.utils import pprint
import warnings
warnings.filterwarnings("ignore")


href_list = []   # 기사 주소가 들어갈 리스트
TitDesc_list = []   # 제목 + 요약 내용 리스트
title_list = []   # 제목 리스트


def Crawling(keyword, date):
    keyword = '+'.join(keyword.split(' '))

    last = False
    page_num = 1

    ds = date
    de = ds
    while last == False:
        url = "https://search.naver.com/search.naver?&where=news&query={0}&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=3&ds={1}&de={2}&docid=&nso=so:r,p:,a:all&mynews=1&cluster_rank=238&start={3}&refresh_start=0".format(keyword,ds,de,str(page_num))
        raw = requests.get(url)
        html = raw.content
        soup = bs(html, 'html.parser')

        ul = soup.find('ul', {'class':'type01'})
        li_list = ul.findAll('li')

        for li in li_list:
            try:
                href_list.append(li.dl.dt.a['href'])

                d_list = li.findAll('dd')
                #자식 노드 dd가 두 개인데 두 번째 노드에 description이 들어가있으므로 전부 불러온 후 인덱싱할 것임

                title = li.dl.dt.a['title']
                description = d_list[1].text
                # 자식 노드 dd의 두 번째에 들어가 있는 description을 text로 불러옴

                title_list.append(title)
                TitDesc_list.append( title + ' ' + description)
                # 제목과 요약내용을 붙여서 리스트에 넣음 
            except AttributeError:
                pass

        
        # 마지막 페이지 주소 확인 (다음페이지 버튼이 없으면 종료페이지로 간주)
        page = soup.find('div', {'class':'paging'})
        page_a_list = page.findAll('a')
        if '다음페이지' in str(page_a_list[-1]):
            page_num += 10
        else:
            last = True
            

Crawling('춘천', '2020.07.14')

 

'춘천'이라는 키워드로 7월 14일의 기사를 크롤링

 

- 크롤링 내용 출력

 

제목 리스트
제목 + 요약 내용 리스트

 

 

Comments