1) URL 을 받아옴
2) read_html 로 테이블 정보를 받아옴
3) 데이터프레임 컬럼명을 ["제목", "정보제공", "날짜"]로 변경
4) temp_list 에 데이터프레임을 추가
5) concat 으로 리스트 병합하여 하나의 데이터프레임으로 만들기
6) 결측치 제거
7) 연관기사 제거
8) 데이터프레임 반환
# pandas 불러오기
import pandas as pd
import numpy as np
import FinanceDataReader as fdr
df_krx = fdr.StockListing("KRX")
a=[df.values]
item_code = "263750"
item_name = "펄어비스"
page_no = 1
url = f"https://finance.naver.com/item/news_news.nhn?code={item_code}&page={page_no}&sm=title_entity_id.basic&clusterId="
table = pd.read_html(url, encoding="cp949")
df = table[0]
cols = df.columns
temp_list = []
cols = table[0].columns
for news in table[:-1]:
news.columns = cols
temp_list.append(news)
display(news)
#concat :
#axis=0 행을 기준으로 위아래로 같은 컬럼끼리 값을 이어 붙여 새로운 행을 만듦
#axis=1 컬럼을 기준으로 인덱스가 같은 값을 옆으로 붙여 새로운 컬럼을 만듦
df_news = pd.concat(temp_list)
df_news = df_news.dropna()
df_news = df_news.reset_index(drop=True)
#.str.contains 를 사용하며 조건의 반대에는 앞에 ~ 표시로 표현
df_news = df_news[~df_news["정보제공"].str.contains("연관기사")].copy()
df_news = df_news.drop_duplicates()
# get_url item_code, page_no 를 넘기면 url 을 반환하는 함수
def get_url(item_code, page_no):
"""
item_code, page_no 를 넘기면 url 을 반환하는 함수
"""
url = f"https://finance.naver.com/item/news_news.naver?code={item_code}&page={page_no}&sm=title_entity_id.basic&clusterId="
return url
get_url("035720",1)
# get_one_page_news 함수 만들기
def get_one_page_news(item_code, page_no):
"""
get_url 에 item_code, page_no 를 넘겨 url 을 받아오고
뉴스 한 페이지를 수집하는 함수
1) URL 을 받아옴
2) read_html 로 테이블 정보를 받아옴
3) 데이터프레임 컬럼명을 ["제목", "정보제공", "날짜"]로 변경
4) temp_list 에 데이터프레임을 추가
5) concat 으로 리스트 병합하여 하나의 데이터프레임으로 만들기
6) 결측치 제거
7) 연관기사 제거
8) 데이터프레임 반환
"""
url = get_url(item_code,page_no)
table = pd.read_html(url)
df = table[0]
cols = df.columns
temp_list = []
for news in table[:-1]:
news.columns = cols
temp_list.append(news)
df_news = pd.concat(temp_list)
df_news = df_news.dropna()
df_news = df_news.drop_duplicates()
df_news = df_news.reset_index(drop=True)
df_news = df_news[~df_news["정보제공"].str.contains("연관기사")].copy()
return df_news
# time.sleep() 을 통해 데이터를 쉬었다 가져옵니다.
import time
from tqdm import trange
item_code = df_krx.loc[df_krx["Name"] == "삼성전자", "Symbol"].values[0]
news_list = []
for page_no in trange(1,11):
temp = get_one_page_news(item_code, page_no)
news_list.append(temp)
time.sleep(0.01)