TOP
class="layout-aside-left paging-number">
본문 바로가기
데이터분석 만능열쇠 [파이썬]/<파이썬 데이터 분석>

[파이썬] 주유소 가격 비교하기 - 1

by 기록자_Recordian 2024. 4. 20.
728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.

서울시 구별 주유소 가격 정보 얻기

 

먼저 selenium 을 활용하여 Opinet (주유소 검색 사이트) 접속

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

오피넷
처음에 뜨는 화면

XPath 확보하기

 

개발자도구(F12 버튼)를 이용하여 영등포구라는 구 이름이 위치하는 곳을 클릭하면 나타나는 우측 코드에서 마우스 오른쪽 버튼으로 XPath 복사하기 진행

 

마우스 오른쪽 버튼 > cop > copy XPath

 

확보한 XPath를 이용해서 element를 찾고 gu_list_raw 변수에 저장

#교재 태그
gu_list_raw = driver.find_element_by_xpath("""//*[@id="SIGUNGU_NM0"]""")
gu_list = gu_list_raw.find_elements_by_tag_name("option")
▶ AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath' 에러 메시지 뜸

#수정 태그
gu_list_raw = driver.find_element(By.XPATH, '//[@id="SIGUNGU_NM0"]')\
gu_list = gu_list_raw.find_elements_by_tag_name("option")
▶ AttributeError: 'WebElement' object has no attribute 'find_elements_by_tag_name' 에러 메시지 뜸#다시 수정
# 재수정 태그(정상 작동)
gu_list_raw = driver.find_element(By.XPATH, '//*@id="SIGUNGU_NM0"]')
gu_list = gu_list_raw.find_elements(By.TAG_NAME, "option")
#select 밑에 option 이라는 태그에 구 이름 저장 되어 있음

 

※ 구 리스트는 find_elements(By.TAG_NAME 으로 option 이라는 태그 찾으면 됨.

이때 elements 복수형으로 표현 (selenium 단수형 명령어에서는 하나만, 복수형 명령어에서는 전부를 리스트형으로 반환)

 

구 이름 불러오기
gu_names = [option.get_attribute("value") for option in gu_list]
gu_names.remove('')
gu_names

구 이름 불러오기

 

시험삼아 구 입력해보기

element = driver.find_element(By.ID, "SIGUNGU_NM0")
element.send_keys(gu_names[2]) #번째 구 입력

잘 바뀌는 것을 볼 수 있다

강북구
세번째(0, 1, 2) 구는 강북구

 

조회 버튼 XPath 알아내기

#교재(오류코드)
xpath = '//*[@id="searRgSelect"]'
element_sel_gu = driver.find_element_by_xpath(xpath).click()
▶ AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath' 에러메시지 뜸

#수정 코드
xpath = '//*[@id="searRgSelect"]'
element_sel_gu = driver.find_element(By.XPATH, xpath)
element_sel_gu.click()

 

강북구 주유소 조회 완료
조회 버튼이 잘 눌린다

엑셀로 저장하기

 

마찬가지로, 엑셀저장 버튼의 XPath도 복사

#교재 코드(에러)
xpath = """//*[@id="glopopd_excel"]"""
element_get_excel = driver.find_element_by_xpath(xpath).click()

#수정 코드
xpath = '//*[@id="templ_list0"]
element_get_excel = driver.find_element(By.XPATH, xpath)
element_get_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(2)

# 검색 버튼 클릭
    xpath = '//*[@id="templ_list0"]'
    element_sel_gu = driver.find_element(By.XPATH, xpath)
    element_sel_gu.click()

    time.sleep(1)

# 엑셀 다운로드
    xpath = '//*[@id="templ_list0"]'
    element_get_excel = driver.find_element(By.XPATH, xpath)
    element_get_excel.click()

    time.sleep(1)

모듈 import
크롬 드라이버 지역별 주유소 조회
실시간으로 구를 조회하는게 보인다

 

그러나, 구를 조회는 하는데 엑셀이 다운로드가 안 된다. 그래서 챗 gpt에 검색하여 새로운 코드를 얻어서 해봤으나 실패.

이럴땐 구글링을 해야 해결된다.

#구글링을 통해 얻은 코드
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.XPATH, '//*[@id="templ_list0"]/div[7]/div/a/span').click()
  time.sleep(3)

결과는 성공!

다운로드된 엑셀 리스트
성공

 


데이터 정리 및 시각화는 다음 시간에 (출장 다녀와서!)

[출장(중국 상해) 다녀와서 진행된 다음 분석]

[파이썬] 주유소 가격 비교하기 - 2

728x90
반응형