IT/Python
[Python - 크롤링] 네이버 증권 뉴스 엑셀파일 저장하기
멋진 선배
2025. 4. 25. 17:58
반응형
#1단계
#첫번째 뉴스 - 제목, 링크, 내용, 언론사, 날짜
import requests
from bs4 import BeautifulSoup
import pandas as pd
import openpyxl
response = requests.get("https://finance.naver.com/news/mainnews.naver?date=2025-04-23")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# .articleSubject 클래스 하위에 있는 a 태그 표기
print(soup.select_one(".articleSubject > a"))
# .articleSubject 클래스 하위에 있는 a 태그의 텍스트 표기
print(soup.select_one(".articleSubject > a").text)
# .articleSubject 클래스 하위에 있는 a 태그의 속성표기
print(soup.select_one(".articleSubject > a").attrs)
# .articleSubject 클래스 하위에 있는 a 태그의 href의 값 갖고오기
print("https://finance.naver.com" + soup.select_one(".articleSubject > a").attrs['href'])
# 언론사 찾기
print(soup.select_one(".press").text.strip())
# 날짜 찾기
print(soup.select_one(".wdate").text)
# 2단계
# 1페이지 20개 뉴스 - 제목, 링크, 내용. 언론사, 날짜 출력하기
articles = soup.select(".block1")
for article in articles :
title = article.select_one(".articleSubject > a").text
link = "https://finance.naver.com" + article.select_one(".articleSubject > a").attrs['href']
content = article.select_one(".articleSummary").contents[0].strip()
press = article.select_one(".press").text.strip()
wdate = article.select_one(".wdate").text
print(title, link, content, press, wdate)
# 3단계
# 1페이지 부터 마지막 페이지까지 크롤링 하기
for i in range(1, 1000):
response = requests.get(f"https://finance.naver.com/news/mainnews.naver?date=2025-04-23&page={i}")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select(".block1")
for article in articles :
title = article.select_one(".articleSubject > a").text
link = "https://finance.naver.com" + article.select_one(".articleSubject > a").attrs['href']
content = article.select_one(".articleSummary").contents[0].strip()
press = article.select_one(".press").text.strip()
wdate = article.select_one(".wdate").text
print(title, link, content, press, wdate)
# 매칭되는 태그가 없다면 None 객체 반환(맨뒤 버튼)
# 마지막 페이지를 체크
if soup.select_one(".pgRR") == None:
break
# 4단계
# 엑셀저장
data= []
for i in range(1, 1000):
response = requests.get(f"https://finance.naver.com/news/mainnews.naver?date=2025-04-23&page={i}")
html = response.text
soup = BeautifulSoup(html, 'html.parser')
articles = soup.select(".block1")
for article in articles :
title = article.select_one(".articleSubject > a").text
link = "https://finance.naver.com" + article.select_one(".articleSubject > a").attrs['href']
content = article.select_one(".articleSummary").contents[0].strip()
press = article.select_one(".press").text.strip()
wdate = article.select_one(".wdate").text
print(title, link, content, press, wdate)
data.append([title, link, content, press, wdate])
# 매칭되는 태그가 없다면 None 객체 반환(맨뒤 버튼)
# 마지막 페이지를 체크
if soup.select_one(".pgRR") == None:
break
#데이터 프레임 생성
df = pd.DataFrame(data, columns=['제목','링크','내용','언론사','날짜'])
print(df)
# 엑셀저장
df.to_excel("naver.xlsx", engine='openpyxl')
반응형
반응형