오늘도 잡주에 물려있는 고잉킴입니다.
테마주 크리 타고 잠깐 올랐던 주식에 물려서 빼지도 못하고 외면하고 있습니다.
헛헛한 마음에 이미 많은 블로그에서 공유되었지만 일별 시세를 web crawling 을 해보았습니다.
1. 패키지 install
pip install beautifulsoup4
pip install pandas==2.0.3
pip install requests
pip install lxml ## html parser
pandas 의 버전을 지정한 이유는 2.1.0부터 read_html 이 deprecate되어서 2.0.3으로 지정하여 설치하였구요.
Error : FutureWarning: Passing literal html to 'read_html' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object. data = pd.read_html(req)[0].to_csv(index=False, header=True) |
parser로는 많이 사용하는 lxml을 사용하겠습니다.
2. 필요 패키지 import
from bs4 import BeautifulSoup
import requests
import pandas as pd
3. URL, GET request 입력
각 사별 코드 번호는 네이버 증권에서 검색시 숫자가 있는데요. 그 숫자를 넣어주시면 됩니다.
code = '코드번호'
sise_url = f'https://finance.naver.com/item/sise_day.naver?code={code}'
headers = {'User-agent': 'Mozilla/5.0'}
html_content = requests.get(sise_url, headers=headers).text
여기서 header 에 User-agent 를 넣어줍니다. 해당 페이지로 접근해서 개발자 도구 > Network > Header 정보를 조회할 수 있습니다. User-agent의 경우 네이버 증권 접속시 필수 Header라 넣어줘야 접근이 가능합니다.
4. html 파싱하고 맨 마지막 페이지 정보 추출
soup = BeautifulSoup(html_content, "lxml")
pgrr = soup.find('td', class_='pgRR')
print(pgrr.a['href'])
s = pgrr.a['href'].split('=')
last_page = s[-1]
맨 마지막 페이지의 태그를 찾아서 a태그 값을 출력해보고 마지막 페이지를 추출합니다.
5. 데이터 조회
df = pd.DataFrame()
for page in range(1, int(last_page)+1):
url = '{}&page={}'.format(sise_url, page)
req = requests.get(url, headers=headers).text
df = df._append(pd.read_html(req, header=0)[0], ignore_index=True)
df = df.dropna()
df.reset_index(drop=True, inplace=True)
print(df)
6. 정리
네이버 증권뿐만 아니라 일부 웹크롤링을 막아두지 않은 사이트에 대해서도 적용해볼 수 있지 않을까 싶습니다.
물론 인증 부분이 들어가면 requests 관련 추가되는 부분들이 있겠네요.
결국 접근하는 url 정보와 tag 정보 (페이지 우클릭 > 페이지 소스 보기) 를 변경해주면서 필요한 정보를 긁어가면 되겠죠!
'IT > python' 카테고리의 다른 글
[python] 우리동네 아파트 전세가율 조회 사이트 만들어보기 (1) | 2023.11.27 |
---|---|
[python] streamlit으로 챗봇 화면 만들기 (0) | 2023.10.26 |
[python] Flask를 사용하여 웹서버 올리기 (0) | 2023.10.18 |
[python] streamlit을 사용해 frontend 올리기 (1) | 2023.10.18 |
[python] langchain을 활용한 기본 프롬프트 사용하기 (1) | 2023.10.17 |