시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.
서울시 구별 주유소 가격 정보 얻기
먼저 selenium 을 활용하여 Opinet (주유소 검색 사이트) 접속
driver = webdriver.Chrome()
driver.get("https://www.opinet.co.kr/searRgSelect.do")
XPath 확보하기
개발자도구(F12 버튼)를 이용하여 영등포구라는 구 이름이 위치하는 곳을 클릭하면 나타나는 우측 코드에서 마우스 오른쪽 버튼으로 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]) #번째 구 입력
잘 바뀌는 것을 볼 수 있다
조회 버튼 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)
그러나, 구를 조회는 하는데 엑셀이 다운로드가 안 된다. 그래서 챗 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)
결과는 성공!
데이터 정리 및 시각화는 다음 시간에 (출장 다녀와서!)
[출장(중국 상해) 다녀와서 진행된 다음 분석]
'[파이썬 Projects] > <파이썬 데이터 분석>' 카테고리의 다른 글
[파이썬] 주유소 가격 비교하기 - 3 (0) | 2024.04.29 |
---|---|
[파이썬] 주유소 가격 비교하기 - 2 (0) | 2024.04.29 |
[파이썬] 시카고 맛집 분석-3 (2) | 2024.04.18 |
[파이썬] 시카고 맛집 분석-2 (1) | 2024.04.17 |
[파이썬] 시카고 맛집 분석-1 (1) | 2024.04.16 |