반응형
#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')
반응형
반응형
'IT > Python' 카테고리의 다른 글
[Python-크롤링] 웹사이트 파라미터 종류가 많을때 크롤링 하는 방법 1단계 (0) | 2025.04.30 |
---|---|
[Python - 크롤링] 네이버지식인 데이터 크롤링 1단계 (0) | 2025.04.28 |
[Python - 크롤링] 한국 주식 종가 갖고 오는 프로그램 코드 (0) | 2025.04.25 |
[파이썬-크롤링] 네이버 증권 뉴스 크롤링 하기 (0) | 2025.04.24 |
[파이썬 오류] IndentationError: unindent does not match any outer indentation level (0) | 2025.04.23 |