Python/크롤링

네이버 뉴스 제목 크롤링

soo15 2023. 6. 10. 21:50

1. 첫번째 페이지만 제목 추출

import requests
from bs4 import BeautifulSoup

# 페이지
page = 1
# 크롤링 하고 싶은 검색어
query = '푸바오'
page_url = f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query={query}&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=24&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start={page}'

# page_url 읽어오기 
# (requests.get(page_url)만 적으면 오류가 날 수 있음, 따라서 User-Agent 를 넣어주어야 한다.
source = requests.get(page_url, headers={'User-Agent':'Mozilla/5.0'}).text
source = BeautifulSoup(source, "html.parser")

# 제목 추출
articles = source.find_all("a", class_ ="news_tit")
for article in articles:
    title = article.get_text()
    print(title)

 

Out[1]:

“푸바오, 꼭 중국 보내야…” 사육사가 아기 판다 중국行 찬성하는 이유
'용인 푸씨'답게 한국어로 이모·삼촌 팬들에게 손편지 남긴 푸바오
‘푸바오’와 ‘세로’의 집, 동물원의 딜레마 [금요시사회]
"우리집 맞아? 놀이동산 갈 필요없네" [현장]
중국으로 가는 '용인 푸씨' 판다 푸바오, 왜?
오늘도 즐거운 '푸공주' 푸바오와 두 할아버지
아기 판다 '푸바오' 인기에…에버랜드 방문객 20% ↑
한해 "푸바오로 살아보고 싶어", 황치열 "노홍철 형님이 부러워" (컬투쇼)
한해 “아기 판다 푸바오 되고파, 가만있어도 귀여움 받는 삶”(컬투쇼)
'용인 푸씨' 아기 판다 푸바오 ..."중국 간다는 소식에..." [앵커리포트]

 

 

 

2. 원하는 페이지까지 제목 추출

네이버 뉴스 페이지( {page} )가 10씩 증가하므로 1페이지부터 20페이지는 다음과 같이 증가한다.

for page in range(1,200,10):
    print(page)

Out[2]:

1
11
21
31
41
51
61
71
81
91
101
111
121
131
141
151
161
171
181
191

따라서 다음과 같이 크롤링 할 수 있다.

 

 

1) 1페이지부터 20페이지까지 네이버 뉴스 제목을 크롤링하기

# 크롤링 하고 싶은 검색어
query = '푸바오'

# 크롤링하여 제목을 list로 추출하기
title_list = []
for page in range(1,200,10):
    page_url = f'https://search.naver.com/search.naver?where=news&sm=tab_pge&query={query}&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=24&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start={page}'
    source = requests.get(page_url, headers={'User-Agent':'Mozilla/5.0'}).text
    source = BeautifulSoup(source, "html.parser")
    source
    
    # 제목 추출
    articles = source.find_all("a", class_ ="news_tit")
    for article in articles:
        title = article.get_text()
        title_list.append(title)


# title_list를 데이터 프레임으로 만들기
import pandas as pd
df = pd.DataFrame({'제목' : title_list})
df

Out[3]:

  제목
0 “푸바오, 꼭 중국 보내야…” 사육사가 아기 판다 중국行 찬성하는 이유
1 '용인 푸씨'답게 한국어로 이모·삼촌 팬들에게 손편지 남긴 푸바오
2 ‘푸바오’와 ‘세로’의 집, 동물원의 딜레마 [금요시사회]
3 "우리집 맞아? 놀이동산 갈 필요없네" [현장]
4 중국으로 가는 '용인 푸씨' 판다 푸바오, 왜?
... ...
95 [여기는 베이징] 미국에서 20년 만에 돌아온 판다에 中 ‘들썩’
96 “가지마”…중국으로 시집간다는 판다 ‘푸바오’[이슈픽]
97 [리뷰] '다수다' 사육사 밝힌 푸바오 탄생 비화·하이에나 반전
98 '다수의 수다' 아기 판다 푸바오 강철원 사육사 "집사로서 인기 얻어"
99 두 살 생일 맞은 푸바오

100 rows × 1 columns

 

 

2) 위의 결과를 엑셀로 저장하기

df.to_excel("네이버 기사_푸바오.xlsx", index=False)

" " 안에 작성한 명칭으로 저장된다.