# 검색을 통해 종목 코드와 종목 이름을 찾기
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 파일로 저장함