!pip install -U finance-datareader
import FinanceDataReader as fdr
# KRX : KRX 종목 전체
df = fdr.StockListing("KRX")
#요약, 기술통계, sorting등 데이터프레임형태로 가공할 수 있음
# to_csv로 Dataframe을 데이터 저장용 파일인 CSV 파일로 바꿀 수 있습니다.
df.to_csv("krx.csv",index = False, encoding = "cp949")
# CSV로 저장된 파일을 다시 DataFrame으로 읽어서 확인해 봅니다.
pd.read_csv("krx.csv", encoding = "cp949")
페이지 확인 → 검사 → network → 확인
#페이지 수집해서 데이터프레임에 저장하기
#수집할 url 가져오기
item_code = "035720"
item_name = "카카오"
# url: f-string
url = f"<https://finance.naver.com/item/news_news.nhn?code={item_code}&page=1&sm=title_entity_id.basic&clusterId=>"
#데이터프레임에 담기: pd.read_html
table = pd.read_html(url)
cols = table[0].columns #컬럼 인덱스만 추출하기
#반복문으로 데이터 가져오기
temp_list = []
for news in table[:-1]: #페이징부분 제외하고 가져오기
news.columns = cols #컬럼 넣기
temp_list.append(news)
display(news)
# 수집한 데이터 합치기: pd.concat
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["정보제공"].str.contains("연관기사")].copy()
#중복값 제거
df_news.drop_duplicates()
# 함수로 만들기
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 = 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)
cols = table[0].columns
temp_list = []
for news in table[:-1]:
news.columns = cols
temp_list.append(news)
df_news = pd.concat(temp_list)
df_news.dropna()
df_news = df_news.reset_index(drop=True)
df_news = df_news[~df_news["정보제공"].str.contains("연관기사")].copy()
df_news = df_news.drop_duplicates()
return df_news
item_code = "035720"
page_no = 2
temp = get_one_page_news(item_code, page_no)
temp
!pip install -U finance-datareader
import FinanceDataReader as fdr
import time
from tqdm import trange
#종목코드와 페이지번호로 페이지 받아오는 함수 정의
def get_ne_page_news(item_code, page_no):
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)
cols = table[0].columns
temp_list = []
for news in table[:-1]:
news.columns = cols
temp_list.append(news)
df_news = pd.concat(temp_list)
df_news.dropna()
df_news = df_news.reset_index(drop=True)
df_news = df_news[~df_news["정보제공"].str.contains("연관기사")].copy()
df_news = df_news.drop_duplicates()
return df_news
#"기아" 종목코드 krx에서 찾기
df_krx = fdr.StockListing("KRX")
item_name = "기아"
item_code = df_krx.loc[df_krx["Name"] == item_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.1)
#데이터프레임으로 변환
df_news = pd.concat(news_list)
#파일 저장
filename = f"news{itemcode}{item_name}.csv"
df_news.to_csv(file_name, index=False)
[크롤링 & EDA] 메인 및 상세 페이지 수집 함수 만들기: 서울특별시 다산콜센터의 주요 민원 (0) | 2022.10.26 |
---|---|
[크롤링] requests, BeautifulSoup, Json (0) | 2022.09.29 |
[EDA] 범주형데이터 기술통계 및 시각화 (0) | 2022.09.28 |
[EDA] 추상화된 도구로 기술통계량 구하기, 수치형변수 시각화, 상관분석 및 상삼각으로 시각화 (0) | 2022.09.28 |
1주차 과제 뒷풀이: 인덱싱은 리스트나 문자열만! (0) | 2022.09.22 |