반응형
현재 이슈가 되는 하이닉스의 주식 데이터를 크롤링해 보도록 하겠습니다.
해당 데이터는 다음의 주소에서 얻을 수 있습니다.
다른 종목의 데이터는, 종목코드를 변경하면 얻을 수 있습니다.
하이닉스의 종목코드는 000660 입니다.
https://finance.naver.com/item/sise_day.nhn?code=000660&page=1
기본적인 크롤링 방법
먼저, 크롤링에 필요한 패키지들을 가져옵니다.
import pandas as pd
import requests
from bs4 import BeautifulSoup as bs
다음으로는 주식 데이터가 있는 사이트의 HTML 코드를 가져오고, 주식 데이터를 가지고 있는 테이블을 가져옵니다.
이때 user-agent 입력이 필요한데, 다음 사이트에서 본인 정보를 확인할 수 있습니다.
http://www.useragentstring.com/
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0'}
url = 'https://finance.naver.com/item/sise_day.nhn?code=000660&page=1' #Hynix daily price
response = requests.get(url, headers=headers)
html = bs(response.text, 'html.parser') #Import HTML code
html_table = html.select("table")
table = pd.read_html(str(html_table)) #Import table
table 변수 안에는 2개의 테이블 데이터가 있는데, 다음에서 알 수 있듯이 table[0] 데이터가 우리가 원하는 데이터입니다.
여러 페이지 크롤링 하기
지금까지는 하이닉스 일별시세 1페이지에 해당하는 데이터로 진행했는데, for 명령어를 사용하면 여러 페이지에 대해서도 적용이 가능합니다.
import pandas as pd
import requests
from bs4 import BeautifulSoup as bs
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0'}
url = 'https://finance.naver.com/item/sise_day.nhn?code=000660'
df = pd.DataFrame()
for page in range(1, 4): #3페이지까지의 데이터 가져오기
page_url = '{}&page={}'.format(url, page) #각 페이지의 url 만들기
response = requests.get(page_url, headers=headers)
html = bs(response.text, 'html.parser')
html_table = html.select("table")
table = pd.read_html(str(html_table))
# table[0]의 결측치를 제거하고, df 변수에 데이터를 누적함
df = pd.concat([df, table[0].dropna()], ignore_index=True)
df = df.sort_values(by='날짜') #시간순서로 날짜를 정렬함
하이닉스 일별시세 사이트의 3페이지까지의 데이터를 위와 같이 가져와 보았습니다.
가져온 데이터 중 "종가"를 "날짜"에 따라 그래프로 그려서, 데이터 크롤링에 문제가 없는지 확인하고자 합니다.
import matplotlib.pyplot as plt
plt.figure(figsize=(15, 5))
plt.title('Hynix (close)')
plt.xticks(rotation=90)
plt.plot(df['날짜'], df['종가'], 'ro-')
plt.grid(color='gray', linestyle='--')
plt.show()
위와 같이 12월 11일부터 1월 24일까지의 종가 데이터가 문제없이 크롤링되었음을 확인할 수 있습니다.
반응형
'파이썬' 카테고리의 다른 글
JVMNotFoundException 에러 해결하기 (0) | 2025.02.09 |
---|---|
캔들 차트 그리기 (2) | 2025.02.08 |
상관 관계 (0) | 2025.01.30 |
DataFrame에서 데이터 정보 확인 (0) | 2025.01.29 |
FinanceDataReader로 금융 데이터 불러오기 (6) | 2025.01.28 |