본문 바로가기
데이터 분석

셀레니움 (selenium)을 이용한 데이터 크롤링

by Alan_Kim 2023. 4. 24.
728x90
반응형

1)  크롬 정보 확인

크롬의 버전을 확인한다.

2) webdriver 설치

아래 사이트 들어가서 버전에 맞는 크롬을 설치한다.

필자는 112.버전으로 설치

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 113, please download ChromeDriver 113.0.5672.24 If you are using Chrome version 112, please download ChromeDriver 112.0.5615.49 If you are using Chrome version 111, please download ChromeDriver 111.0.5563.64

chromedriver.chromium.org

윈도우 64비트도 32로 다운로드한다.

그러면 준비는 끝!

파이썬 selenium을 이용하서 데이터 크롤링 할 것이다.

네이버 증권의 다음 네모박스란을 크롤링해보겠다.

https://finance.naver.com/sise/

'ctrl' 'shift' 'i' 를 눌러서 개발자도구를 연다.

body 부분에 마우스를 갖다 대면 전체가 파란부분으로 변한다.

파란부분을 세분화하여 원하는 부분이 파란색으로 되어있으면 마우스를 눌러 세부적인 코드로 들어간다.

 

완전 세분화하여 내가 원하는 텍스트만 파란색으로 되어있을 때 마우스 오른쪽 부분을 눌러 copy의 copy_Xpath를 누른다.

그리고 아래 코드처럼 driver.find_element_by_xpath('copy_Xpath').text에 넣어 원하는 텍스트를 가져올 수 있다.

 

CODE(원하는 부분을 크롤링하여 데이터프레임으로 만든 다음 csv파일로 만들었다.)

from selenium import webdriver
import pandas as pd
import urllib.request
driver = webdriver.Chrome(executable_path='C:/Users/singo/Downloads/chromedriver_win32/chromedriver.exe')
driver.get('https://finance.naver.com/sise/')
# driver.find_element_by_xpath('//*[@id="NM_NEWSSTAND_HEADER"]/div[2]/a[3]').click()
#driver.implicitly_wait(10)
driver.find_element_by_xpath('//*[@id="contentarea_left"]/div[2]/table/tbody/tr[3]').text
num_list = []
name_list=[]
price_list=[]
increase_list=[]
for i in range(2,11):
    if i in [5,6,7]: continue
    number = driver.find_element_by_xpath('//*[@id="organ_deal_tab_0"]/tbody/tr['+str(i)+']/td[1]/img')
    number_url = number.get_attribute('src')
    urllib.request.urlretrieve(number_url,'image'+str(i)+'.png') # 이미지 따로 저장
    num_list.append(number_url)
    name = driver.find_element_by_xpath('//*[@id="organ_deal_tab_0"]/tbody/tr['+str(i)+']/td[2]/a')
    name_list.append(name.text)
    price = driver.find_element_by_xpath('//*[@id="organ_deal_tab_0"]/tbody/tr['+str(i)+']/td[3]')
    price_list.append(price.text)
    increase = driver.find_element_by_xpath('//*[@id="organ_deal_tab_0"]/tbody/tr['+str(i)+']/td[4]/span')
    increase_list.append(increase.text)

df = pd.DataFrame({'등수':num_list,'기업명':name_list,'가격':price_list,'증가율':increase_list})
df.to_csv(path_or_buf='C:/Users/singo/Downloads/chromedriver_win32/stock.csv',header=['등수','기업명','가격','증가율'],encoding='cp949',index=False)
print(df.head())
print('finish!')
driver.quit() # 자동으로 꺼짐

 

사실 개발자도구 내용을 알아야 더 이해하기 쉽고 오래간다. 

필자는 HTML을 모르는 상태로 많이 어려웠었는데... 아는상태여도 기록하기 역시 어렵다.

요즘 유튜브도 잘 나오고 내가 알아볼 수는 있으므로 여기서 정리 끝!

728x90
반응형

댓글