본문 바로가기
개발/파이썬

웹크롤링_네이버증권 시가총액순 기업정보(심화)

by 권이사 2024. 6. 9.

1. 개요

  - 네이버증권에서 시가총액순으로 기업정보 정렬시 기본 체크된 항목을 해제하고 다른 투자지표로 적용한 후 크롤링하기

(조회하려는 항목 변경하여 출력)

 

 

2. 웹크로링 실행

(1) 라이브러리 설치

pip install pandas, selenium, lxml

* pandas – 테이블 형태의 데이터 조작과 분석

* selenium – 웹 브라우저에서 페이지 이동, 입력, 클릭 등 자동으로 실행

* lxml – XML, HTML 문서에서 구조화된 데이터 가공

(터미널 열고 pandas, selenium, lxml 라이브러리 설치하기)

 

(2) 라이브러리 불러오기

import os
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

 

(3) 데이터 요청 및 추출

browser = webdriver.Chrome()

url = "https://finance.naver.com/sise/sise_market_sum.naver?&page="
browser.get(url)

checkboxes = browser.find_elements(By.NAME, 'fieldIds')
for checkbox in checkboxes:
    if checkbox.is_selected():
        checkbox.click()

items_to_select = ['시가총액', '외국인비율', '보통주배당금', 'PER', 'PBR', '유보율']
for checkbox in checkboxes:
    parent = checkbox.find_element(By.XPATH, '..')
    label = parent.find_element(By.TAG_NAME, 'label')
    if label.text in items_to_select:
        checkbox.click()

btn_apply = browser.find_element(By.XPATH, '//a[@href="javascript:fieldSubmit()"]')
btn_apply.click()

for idx in range(1, 5):
    browser.get(url + str(idx))
        
    df = pd.read_html(browser.page_source)[1]
    df.dropna(axis='index', how='all', inplace=True)
    df.dropna(axis='columns', how='all', inplace=True)
    if len(df) == 0:
        break
    print(df)

(소스 입력 후 실행하면 항목체크 해제 후 설정한 항목 체크 적용하여 기업정보를 긁어옴)

(4) CSV로 저장

f_name = '시가총액200.csv'
if os.path.exists(f_name):
    df.to_csv(f_name, encoding="utf-8-sig", index=False, mode='a', header=False)
else:
    df.to_csv(f_name, encoding="utf-8-sig", index=False)
print(f'{idx} 페이지 완료')

browser.quit()

(소스 입력 후 실행하면 csv 파일 생성)
(마우스 우클릭하여 엑셀파일로 열어 필요에 맞게 편집)

 

 

3. 종합

import os
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

# 1.페이지 이동
url = "https://finance.naver.com/sise/sise_market_sum.naver?&page="
browser.get(url)

# 2. 기본 체크항목 초기화
checkboxes = browser.find_elements(By.NAME, 'fieldIds')
for checkbox in checkboxes:
    if checkbox.is_selected():
        checkbox.click()

# 3. 조회항목 설정
items_to_select = ['시가총액', '외국인비율', '보통주배당금', 'PER', 'PBR', '유보율']
for checkbox in checkboxes:
    parent = checkbox.find_element(By.XPATH, '..')
    label = parent.find_element(By.TAG_NAME, 'label')
    # print(label.text)
    if label.text in items_to_select:
        checkbox.click()

# 4. 적용하기 클릭
btn_apply = browser.find_element(By.XPATH, '//a[@href="javascript:fieldSubmit()"]')
btn_apply.click()

for idx in range(1, 5):
    browser.get(url + str(idx))
        
# 5. 데이터 추출
    df = pd.read_html(browser.page_source)[1]
    df.dropna(axis='index', how='all', inplace=True)
    df.dropna(axis='columns', how='all', inplace=True)
    if len(df) == 0:
        break
    # print(df)

    # 6. 파일저장
    f_name = '시가총액200.csv'
    if os.path.exists(f_name):
        df.to_csv(f_name, encoding="utf-8-sig", index=False, mode='a', header=False)
    else:
        df.to_csv(f_name, encoding="utf-8-sig", index=False)
    print(f'{idx} 페이지 완료')

browser.quit()


* 참고 – 유튜브<나도코딩> → 주식정보 크롤링하기