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 globglob("../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")