EDA_주가분석

이새롬·2023년 3월 2일
0

EDA

목록 보기
6/7
post-thumbnail

beautiful soup으로 해결할 수 없는 것

  • 접근할 웹주소를 알 수 없을때
  • 자바스크립트를 사용하는 웹 페이지 경우
  • 웹브라우저로 접근하지 않으면 안될 때

Selenium

웹브라우저를 원격 조작하는 도구
자동으로 URL을 열고 클릭 등이 가능
스크롤, 문자의 입력, 화면 캡처 등등

설치하기

conda install selenium

크롬 버전을 확인해야함

크롬드라이버 검색 후 최상단 페이지에서
버전 맨 앞자리 3개 같은 걸 눌러 다운로드 받고
작업환경에 크롬드라이버 옮긴다.
(ds_study/driver폴더)

from selenium import webdriver

driver = webdriver.Chrome("크롬드라이버 저장경로")
driver.get("링크주소")

링크주소는 꼭 http:// 넣어주기
새창이 뜨면 성공

💡 작업이 끝나면 꼭
driver.quit()
으로 창을 닫아줘야한다.


  • 화면 최대 크기 설정
    driver.maximize_window()
  • 화면 최소 크기 설정
    driver.minimize_window()
  • 화면 크기 설정
    driver.set_window_size(600,600)

💡 데이터 가져올 때 화면에 보이는 기준으로 가져오기때문에
화면이 최대한 큰 게 좋을 수 있다. (정보가 많이 보이기 때문에)

  • 새로고침
    driver.refresh()
  • 뒤로가기
    driver.back()
  • 앞으로가기
    driver.forward()
  • 새 탭 생성하기
    driver.execute_script('window.open("http://naver.com")')
    execute_script('') 자바스크립트를 쓰겠단 이야기.
    window.open("열고 싶은 주소")
  • 탭 이동
    driver.switch_to.window(driver.window_handles[0])
    화면창은 0번부터
  • 현재 탭 닫기
    driver.close()

💡 방금 막 닫으면, 탭 지정을 새로 해줘야함.
한번 닫으면 탭 이동 되기 전까지 더 안닫음.

  • 전체창 닫기
    driver.quit()
  • 스크롤 가능한 높이(길이)
    driver.execute_script('return document.body.scrollHeight')
    자바스크립트 이용
  • 화면 스크롤 하단 이동
    driver.execute_script('window.scrollTo(0,document.body.scrollHeight);')
    스크롤을 최하단까지 내려달라.
  • 화면 스크롤 상단이동
    driver.execute_script('window.scrollTo(0,0)')
  • window.scrollTo(x축,y축)
    좌표값으로 이동
  • 현재 보이는 화면 스크린샷 저장
    -driver.save_screenshot('./last_height.png')
  • 💡 ActionChains 클래스
    마우스로 할 수 있는 대부분에 동작들
    mouse hover, drag and drop, scoll 등을 해줌
from selenium.webdriver import ActionChains

some_tag = driver.find_element(By.CSS_SELECTOR, 'copy selector')
action = ActionChains(driver)
action.move_to_element(some_tag).perform()

ActionChains 모듈을 호출하고
이동할 요소를 잡아 변수에 담고
ActionChains(driver) 현재 내 드라이버를 지정해 ActionChains에 담고

.move_to_element()
내가 지정한 곳으로 이동하겠다.

.perform()
실행

<<< ActionChains 예제 >>>

동작페이지의 버튼 누를 때! ActionChains를 이용

from selenium.webdriver import ActionChains

search_tag = driver.find_element(By.CSS_SELECTOR,'.search')
action = ActionChains(driver)
action.click(search_tag)
action.perform()


요소찾기

from selenium.webdriver.common.by import By

first_content = driver.find_element(By.CSS_SELECTOR, '요소')
first_content.click()

💡 찾는 요소는 개발자도구를 통해 태그 찾고, 오른쪽 마우스로 copy - copy selector

keyword = driver.find_element(By.CSS_SELECTOR,'copy selector')
keyword.send_keys('검색어')
검색하고, 검색어 입력

keyword.clear()
입력값 지우기


[주가분석 ] _ 추가내용

열었는데 팝업창 떴을때

팝업창 화면 전환 후 닫아주기
driver.switch_to_window(driver.window.handles[-1])
driver.close()

time.sleep()
원하는 주소 목표페이지로 바로 안가고 메인으로 갈때
import time
파일열고
time.sleep()으로 인터벌을 주고 열기실행하면 목표페이지로 간다.

import time

url = "https://www.opinet.co.kr/searRgSelect.do"
driver = webdriver.Chrome("../driver/chromedriver.exe") 
driver.get(url)

time.sleep(3)

driver.get(url)

sido_list[1].get_attribute("value")

get_attiribute('')
속성값 가져오기

glob("가져올 파일")
파일목록 한번에 가져오기
from glob import glob

glob("../data/04.selfoil/지역*.xls")

지역_ 로 끝나는 전부
*를 붙여주면 모두

pd.concat(합칠데이터)
형식이 동일하고 연달아 붙이기만 하면 될 때 에는 concat으로 데이터 병합가능.

가격정보가 - 이 되어있어 타입변환

stations = stations[stations["가격"]!="-"]
-로 되지 않은 데이터만 담아서
stations["가격"] = stations["가격"].astype("float")
변환!

matplotlib 한글설정

import platform
from matplotlib import font_manager, rc

%maplotlib inline

path = "C://Windows/Fonts/malgun.ttf"

if platform.system() == "Darwin":
    rc("font",family="Arial Unicode MS")

elif platform.system() == "windows":
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc("font",family=font_name)

else:
    print("Unknown system. sorry")

0개의 댓글