펀드가이드 (TOP펀드) 크롤링

ianman99 ㅣ 2024. 2. 1. 17:17

from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import csv

# 브라우저 접속
driver = webdriver.Chrome('')

time.sleep(2)

list_result = []

for next_page in range(1, 4): # 1부터 n-1페이지까지 수집
   
    time.sleep(2)

    for i in range(1,11):
       
        # 행 변수 추출
        # 편드명
        fund_name = driver.find_elements(By.CSS_SELECTOR, f'#resultList > tr:nth-child({i}) > td.taL.bold > a > span')
        var1 = fund_name[0].text

        # 기준가
        fund_element_1 = driver.find_elements(By.CSS_SELECTOR, f'#resultList > tr:nth-child({i}) > td:nth-child(3)')
        var2 = fund_element_1[0].text
        var2_cleaned = var2.split('\n') # var2_cleaned 는 list
        var2_cleaned_text = var2_cleaned[0] # 이제 text

        # 운용규모
        fund_element_2 = driver.find_elements(By.CSS_SELECTOR, f'#resultList > tr:nth-child({i}) > td:nth-child(4)')
        var3 = fund_element_2[0].text
        var3_cleaned = var3.split('\n') # var3_cleaned 는 list
        var3_cleaned_text = var3_cleaned[0] # 이제 text

        # 설정일
        fund_date = driver.find_elements(By.CSS_SELECTOR, f'#resultList > tr:nth-child({i}) > td:nth-child(5)')
        var4 = fund_date[0].text

        # 하나의 행으로 저장해 result에 행을 쌓기
        list_1 = [var1, var2_cleaned_text, var3_cleaned_text, var4]
        list_result.append(list_1)
   
    # 다음 페이지로 넘기기
    next = driver.find_element(By.CSS_SELECTOR,'#tabPaging > div > tr > button.btn--paging.btn--next')
    driver.execute_script('arguments[0].click();', next)

print(list_result)

# CSV 파일에 데이터 쓰기
csv_file_path = 'fund_data.csv'

with open(csv_file_path, 'w', newline='', encoding='utf-8-sig') as csvfile: # utf-8-sig : 엑셀에서 한글 깨짐 방지
    csv_writer = csv.writer(csvfile)
   
    # 헤더 작성
    header = ['Fund Name', 'Price', 'AUM', 'Setting Date']
    csv_writer.writerow(header)

    # 데이터 작성
    for row in list_result:
        csv_writer.writerow(row)

print(f'Data saved to {csv_file_path}')

# 사용자 입력을 기다림
input("Press Enter to close the browser...")