# 검색을 통해 종목 코드와 종목 이름을 찾기
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'}
result = []
query = "WON" # 네이버증권 검색어
for item_page_no in range(1, 10): # 검색 페이지 수
url = f'<https://finance.naver.com/search/search.naver?query={query}&endUrl=&page={item_page_no}>'
response = requests.get(url, headers = headers)
html = bs(response.text)
a_tags = html.select('a[href*="/item/main.naver?code="]')
for a in a_tags:
href = a['href']
code = href.split('=')[1] # code= 뒤의 숫자 추출
name = a.text # a 태그 내부의 텍스트
result.append((code, name))
네이버 증권에서 볼 수 있는 모든 ETF의 이름과 티커 심볼을 추출함
import time
for item_code, item_name in result:
item_list = []
etf_before = ""
page_no = 1
print(item_name)
# 각 종목의 전체 페이지 읽어옴
while True:
etf = daily_market_price(item_code, page_no)
# 마지막 페이지 번호와 마지막 페이지 번호 + 1이 동일한 결과를 출력함을 이용
if etf.equals(etf_before):
break
etf_before = etf
item_list.append(etf)
print(page_no)
page_no += 1
time.sleep(0.1)
# 데이터 프레임으로 만들어서 저장
df = pd.concat(item_list, ignore_index = True)
df.to_csv(f'{item_name}.csv', index = False)
print(f'{item_name}.csv 저장 완료')
각 ETF 종목의 일별 종가 페이지에서 상장 이후부터 현재까지의 모든 일별 종가를 크롤링함
마지막 페이지의 번호와 마지막 페이지의 번호 + 1이 동일한 결과를 출력함을 이용해서 if 조건을 설정함
크롤링한 종가는 데이터프레임으로 만들어 csv 파일로 저장함