-
Python 교촌치킨 국내매장 크롤링(Selenium 동적 웹크롤링)DataAnalysis/웹크롤링 2022. 4. 17. 00:15
from selenium import webdriver import time driver = webdriver.Chrome('chromedriver.exe') driver.implicitly_wait(10) url = 'http://www.kyochon.com/shop/domestic.asp' driver.get(url) sido1 = driver.find_element_by_css_selector('#sido1') sido1.click() sido_list = driver.find_elements_by_css_selector('#sido1 > option') length= len(sido_list) time.sleep(0.2) sido1.click() for sido in range(1,length): time.sleep(0.1) driver.find_element_by_css_selector('#sido1').click() time.sleep(0.2) listt=driver.find_elements_by_css_selector('#sido1 > option') listt[sido].click() ################################################# time.sleep(0.2) driver.find_element_by_css_selector('#sido2').click() #print('---------------------------') sido2_list = driver.find_elements_by_css_selector('#sido2 > option') length2 = len(sido2_list) time.sleep(0.2) driver.find_element_by_css_selector('#sido2').click() time.sleep(0.2) for i in range(0,length2): time.sleep(0.2) driver.find_element_by_css_selector('#sido2').click() time.sleep(0.2) listt2 = driver.find_elements_by_css_selector('#sido2 > option') listt2[i].click() time.sleep(0.2) driver.execute_script('search()') # js 실행 time.sleep(0.2) shopSchList = driver.find_elements_by_css_selector('div.shopSchList > ul > li') print('-----------------------------------------------') for store_info in shopSchList: store_name = store_info.find_element_by_css_selector('a > span > strong').text store_addr = store_info.find_elements_by_css_selector('a > span > em')[0].text print(store_name,store_addr) time.sleep(1)
오류 및 해결방법
1.
오류코드: selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
sido를 선택할 수 없다고 뜬다.
for sido in sido_list:
time.sleep(0.5)
driver.find_element_by_css_selector('#sido1').click()
time.sleep(0.3) sido.click()
해결방법 : 웹페이지가 새로 로딩되고 나면 기존의 태그들에 대한 정보가 없어지기 때문에 새로 지정해줘야 한다.
listt=driver.find_elements_by_css_selector('#sido1 > option')처럼 for문안에 새로 list를 새로 정의해서 클릭해 줄 것
for sido in range(1,length): time.sleep(0.1) driver.find_element_by_css_selector('#sido1').click() time.sleep(0.2) listt=driver.find_elements_by_css_selector('#sido1 > option') listt[sido].click()
2. out of range문제
범위안에서 for문을 돌릴 시 for sido in (1,length) -> for sido in range(1,length)
항상 범위를 잘 확인할 것
새로 배운것
버튼클릭 시, 자바스크립트 코드가 실행되게 할 때
driver.execute_script('search()')
'DataAnalysis > 웹크롤링' 카테고리의 다른 글
[python] 코로나 홈페이지 웹 크롤링 및 데이터전처리 : 정적 페이지 웹크롤링, beautifulsoup 사용 (0) 2022.04.25 subway 서브웨이 전국매장 웹크롤링 (0) 2022.04.25 쿠우쿠우 웹크롤링 전국매장 정보 가져오기 (beautifulsoup) (0) 2022.04.22 카페베이 coffeebay 웹크롤링 매장정보 가져오기 (beautifulsoup) (0) 2022.04.22 파스쿠찌 매장정보 크롤링 (Beautifulsoup,지역별 열합계 구하기) (0) 2022.04.19