Goal
Data
대한민국 주유 가격을 알아보는 사이트
목표 데이터
import time
from selenium import webdriver
driver = webdriver.Chrome('driver/chromedriver.exe')
def main_page_access():
driver.get('https://www.opinet.co.kr')
time.sleep(1)
driver.get('https://www.opinet.co.kr/searRgSelect.do')
main_page_access() # 페이지 이동
# 지역 시/도
sido_list_raw = driver.find_element_by_id('SIDO_NM0')
sido_list_raw.text
Output :
' 시/도\n \n \n \n 서울\n \n \n \n 부산\n \n \n \n \n \n 대구\n \n \n \n \n 인천\n \n \n \n \n 광주\n \n \n \n \n 대전\n \n \n \n \n 울산\n \n \n \n \n 세종\n \n \n \n \n 경기\n \n \n \n \n 충북\n \n \n \n \n 충남\n \n \n \n \n 전북\n \n \n \n \n 전남\n \n \n \n \n 경북\n \n \n \n \n 경남\n \n \n \n \n 제주\n \n \n \n \n 강원\n \n \n ‘
sido_list = sido_list_raw.find_elements_by_tag_name('option') # Tag 길이 확인
len(sido_list), sido_list[17].text
Output : (18, '강원')
value
가져오기sido_list[1].get_attribute('value') # 태그 값의 Value 가져오기
Output : '서울특별시’
sido_names = []
for option in sido_list:
sido_names.append(option.get_attribute('value'))
sido_names[:5]
Output : ['', '서울특별시', '부산광역시', '대구광역시', '인천광역시']
sido_names = sido_names[1:] # 빈 칸 제거
sido_names
sido_list_raw.send_keys(sido_names[16]) # 지역 변경
# 구
gu_list_raw = driver.find_element_by_id('SIGUNGU_NM0')
gu_list = gu_list_raw.find_elements_by_tag_name('option') # Tag 길이 확인
len(gu_list), gu_list
gu_names = []
for option in gu_list:
gu_names.append(option.get_attribute('value'))
gu_names[:5]
gu_names = gu_names[1:] # 빈 칸 제거
gu_names
gu_list_raw.send_keys(gu_names[16]) # 지역 변경
엑셀 저장
# 엑셀 저장
driver.find_element_by_css_selector('#glopopd_excel').click()
import time
from tqdm import tqdm_notebook
for gu in tqdm_notebook(gu_names):
element = driver.find_element_by_id('SIGUNGU_NM0')
element.send_keys(gu)
time.sleep(3)
element_get_excel = driver.find_element_by_css_selector('#glopopd_excel').click()
time.sleep(3)
driver.close() # 끝내기
import pandas as pd
from glob import glob
glob('EDA_practice_data\지역_*.xls') # 파일 목록 호출
stations_files = glob('EDA_practice_data\지역_*.xls')
stations_files[:5]
# 하나만 읽어오기
tmp = pd.read_excel(stations_files[0], header = 2) # header부터 column을 가져와라.
tmp.tail()
tmp_raw = []
for file_name in stations_files:
tmp = pd.read_excel(file_name, header = 2)
tmp_raw.append(tmp)
stations_raw = pd.concat(tmp_raw)
stations_raw
# 전체 데이터 확인
stations_raw.info()
stations_raw.columns
stations = pd.DataFrame({
'상호' : stations_raw['상호'],
'주소' : stations_raw['주소'],
'가격' : stations_raw['휘발유'],
'셀프' : stations_raw['셀프여부'],
'상표' : stations_raw['상표']
})
stations.tail()
# 구별 주소만 꺼내기
stations['구'] = [eachAddress.split()[1] for eachAddress in stations['주소']]
stations.tail()
# 변환 전, 가격정보 없는 데이터 확인
stations[stations['가격'] == '-']
# 가격 정보 있는 주유소만 사용
stations = stations[stations['가격'] != '-']
stations
float
로 변경stations['가격'] = stations['가격'].astype(float)
stations
# 인덱스 재정렬
stations.reset_index(inplace = True)
stations.head()
del stations['index']
stations.head()