이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

네이버 금융 크롤링

  • 2022.09.24 15:04
  • --------------
반응형

 

 

 

네이버 금융 사이트는 주식들과 주식들의 정보를 제공한다.

주식 관련 정보를 가져와 적절히 가공해 투자에 사용해보자.

 

 

 

 

어떤 옵션을 표시할 지 설정해주자.

 

 

 

 

 

옵션을 선택하면 주식 명과 선택한 옵션에 대한 정보를 보여준다.

 

옵션을 선택하고 적용하기 버튼을 누르면 URL이 변경되지 않고 화면만 바뀐다.

이런 경우 개발자 도구에서 네트워크 옵션을 사용하자.

 

 

 

 

 

네트워크 옵션이 켜진 상태에서 적용하기 버튼을 누르면 사이트가 서버와 어떤 정보를 주고받았는지 확인할 수 있다.

여기서 제일 위에 위치한 옵션을 살펴보자.

 

 

 

 

 

클라이언트가 서버에 요청한 URL을 얻을 수 있다.

 

요청한 URL은 우리가 선택한 옵션이 반영된 정보를 보여주니, 이 URL을 사용해 크롤링을 진행하면 된다. (페이징 처리도 이쪽 URL을 사용해서 처리하고, URL Decoder를 사용해 줘야 한다)

 

 

 

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

import requests
import time
import pyautogui
import os
import urllib.request
import openpyxl

# 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)

# 불필요한 에러메세지 없애기 
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])

# 크롬드라이버 매너저를 통해 드라이버를 설치, 서비스를 만들어낸다
service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service = service, options=chrome_options)

#---- selenium 기본설정 끝----#

wb = openpyxl.Workbook()
ws = wb.create_sheet('코스피')
ws.append(['종목명', 'per','roe', 'pbr', '유보율'])

lastpage = int(pyautogui.prompt("몇 페이지까지 가져올까요? (1페이지 = 50개)"))

for i in range(1,lastpage+1):
    
    url = f"https://finance.naver.com/sise/field_submit.naver?menu=market_sum&returnUrl=http://finance.naver.com/sise/sise_market_sum.naver?&page={i}&fieldIds=per&fieldIds=roe&fieldIds=pbr&fieldIds=reserve_ratio"

    response = requests.get(url)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')

    trs = soup.select("table.type_2 > tbody >tr[onmouseover]")

    for tr in trs:
        # 클래스 정보가 없을 때 nth-child 사용
        name = tr.select_one('td:nth-child(2)').text
        per = tr.select_one('td:nth-child(7)').text
        roe = tr.select_one('td:nth-child(8)').text
        pbr = tr.select_one('td:nth-child(9)').text
        reserve_ratio = tr.select_one('td:nth-child(10)').text

        # NA이면 가져오지 않음
        if per != 'N/A' and roe != 'N/A' and pbr != 'N/A' and reserve_ratio != 'N/A':
            per = float(per.replace(',', ''))
            roe = float(roe.replace(',', ''))
            pbr = float(pbr.replace(',', ''))
            reserve_ratio = float(reserve_ratio.replace(',', ''))

            print(name, per, roe, pbr, reserve_ratio)
            ws.append([name, per, roe, pbr, reserve_ratio])

wb.save("naverfinancial/코스피분석.xlsx")

 

 

 

 

웹사이트를 분석하다 보면 클래스 정보가 명확하지 않거나 없는 경우가 있다.

 

이 경우 nth-child 옵션을 사용하거나 해당 태그의 부모 태그와 부모의 부모 태그 등을 사용해 해당 태그를 최대한 특정하도록 하자.

 

클래스가 있으면 편하게 특정할 수 있지만, 없는 경우도 위의 조건들을 사용하면 쉽게 특정할 수 있다.

 

 

나머지 작업은 항상 하던대로.. 이전에 진행한 크롤링과 크게 다른 점이 없다.

 

 

개발자 도구의 네트워크 탭을 크롤링에 사용할 수 있는 점과, 클래스 정보가 제한적일 때 태그를 특정할 수 있는 방법을 기억하자.

 

 

반응형
저작자표시 (새창열림)

'--------------' 카테고리의 다른 글

네이버 지도 크롤링  (0) 2022.09.25
크롤링에서 POST 요청이 필요한 경우  (0) 2022.09.24
[CSS] CSS 정리 (5)  (0) 2022.09.21
이미지 크롤링  (2) 2022.09.21
쿠팡 상품 크롤링  (0) 2022.09.20

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 네이버 지도 크롤링

    네이버 지도 크롤링

    2022.09.25
  • 크롤링에서 POST 요청이 필요한 경우

    크롤링에서 POST 요청이 필요한 경우

    2022.09.24
  • [CSS] CSS 정리 (5)

    [CSS] CSS 정리 (5)

    2022.09.21
  • 이미지 크롤링

    이미지 크롤링

    2022.09.21
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (666) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (16)
    • 👥 모각코 (6)
    • 💬 기록 (4)
    • 📚 공부 (2) N
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바