Completion over Perfection

Python(파이썬) 웹 크롤링 - 인스타그램 레이어팝업(dialog box, 다이얼로그 박스) 크롤링 하기! 본문

파이썬 (Python)

Python(파이썬) 웹 크롤링 - 인스타그램 레이어팝업(dialog box, 다이얼로그 박스) 크롤링 하기!

난차차 2020. 4. 6. 23:53
반응형

인스타그램 웹페이지에서 크롤링을 하려다보면,

레이어팝업 형태(외국에서는 dialog box라고 부르는듯함)를 크롤링해야되는 상황이 생깁니다. (아래 그림 참고)

팔로워 버튼을 클릭했을 때 나오는 화면

웹드라이버의 switch_to 명령어를 써서 레이어팝업으로 창을 변환해보려 했으나 소용없었습니다. 

그리고 아무런 조치 없이 단순히 스크롤만 실행을 해버리게 되면 앞에 나온 레이어팝업은 스크롤이 되지않고

뒤에 있는 메인창에서 스크롤이 실행됩니다.

 

레이어 팝업창에서 스크롤을 내리려면 Selenium 웹 드라이버의 execute_script를 활용해야 합니다.

(저의 경우, 팔로워 수가 70~80명정도 되며 스크롤을 6번 내리면 모든 팔로워 리스트를 크롤링할 수 있었습니다.) 

 

 

# 내 프로필로 이동
driver.find_element_by_xpath('/html/body/div[1]/section/nav/div[2]/div/div/div[3]/div/div[4]/a/img').click()
time.sleep(5)
#팔로우 버튼 클릭
driver.find_element_by_xpath('/html/body/div[1]/section/main/div/header/section/ul/li[3]/a/span').click()
time.sleep(5)

wait = WebDriverWait(driver, 20)
pop_up = wait.until(EC.visibility_of_element_located((By.CLASS_NAME,'PZuss')))
followers_panel = driver.find_element_by_xpath('/html/body/div[4]/div/div[2]')
#print(followers_panel)
for i in range(6):
    try:
        driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', followers_panel)
    except:
        pass
    time.sleep(3) 

 

위의 명령을 실행하면 레이어팝업에서 스크롤을 끝까지 내려 전체리스트가 로딩이 됩니다.

그 뒤에 아래 코드로 리스트를 파싱을 해주시면 됩니다. 

 

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

반응형
Comments