네이버 지도 데이터 수집 Selenium

Happy_JG·2023년 8월 29일
0

크롤링

목록 보기
6/8
post-custom-banner

동명동 회식 이란 키워드로 네이버 지도에서 가게 이름 정보들을 크롤링해보자.

1. selenium 필수 import

from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

2. 크롬 드라이버를 실행해서 네이버 지도 사이트로 이동

driver.get('https://map.naver.com/')

3. 검색창에 검색어를 입력("동명동 회식")
검색창의 구분자인 id값이 실행할 대마다 변한다. 이런 경우에는 다른 선택자를 활용해야한다.

search = driver.find_element(By.CSS_SELECTOR,".input_search")
#search = driver.find_element(By.ID,"input_search1693269292230") X

search.send_keys("동명동 회식")
search.send_keys(Keys.ENTER)

4. 미미원을 클릭해서 세부정보 얻기

driver.find_elements(By.CSS_SELECTOR,".place_bluelink.YwYLL")

이렇게 화면상에 데이터가 출력은 되는데 조작이 안될 때는 iframe을 검사해야 한다. requests에서는 iframe src를 찾아서 데이터를 수집했으나 selenium은 다른 방법으로 접근한다.

iframe이란 html위에 html을 말한다.

현재 컴퓨터가 바라보고 있는 html 창을 변경해야한다! 현재 네이버 지도는 두 개의 html 창 중 미미원 정보를 나타내는 html을 바라보고 있는 것이 아니다. 현재 컴퓨터는 오른편의 지도창을 바로보고 있는 상황이다.

미미원을 담고있는 iframe창으로 바꾸기

컴퓨터야 바라보고 있는 창을 내가 원하는 iframe으로 변경해줘!
frame을 변경할 때는 switch_to.frame("iframe의 id")

driver.switch_to.frame('searchIframe') #ID값을 대입

from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

driver = wb.Chrome()

driver.get('https://map.naver.com/')

search = driver.find_element(By.CSS_SELECTOR,".input_search")
search.send_keys("동명동 회식")
search.send_keys(Keys.ENTER)

driver.switch_to.frame('searchIframe')

title = driver.find_elements(By.CSS_SELECTOR,".place_bluelink.YwYLL")

title[0].click()


완료!

5. 상세정보에서 가게 이름 정보 수집
이 또한 우리가 driver.switch_to.frame('searchIframe') 로 옮겼던 것처럼 상세보기 ifrmae으로 옮겨야한다. 그러나!!!! iframe에서 다른 iframe으로 바로 이동하는 것이 불가능하다. 따라서 원본데이터로 이동한 뒤, 다른 iframe 즉 원본데이터에서 상세보기 iframe으로 이동해야 한다.

driver.switch_to.default_content() #원본데이터(default_content)로 이동!
driver.switch_to.frame('entryIframe')
name = driver.find_element(By.CSS_SELECTOR,".Fc1rA")
name.text

#'미미원'

6. 가게 이름 정보 모두 수집

for i in range(5):
    driver.switch_to.default_content()
    driver.switch_to.frame('searchIframe')
    time.sleep(1)
    title = driver.find_elements(By.CSS_SELECTOR,".place_bluelink.YwYLL")
    title[i].click()
    time.sleep(3)
    driver.switch_to.default_content()
    driver.switch_to.frame('entryIframe')
    time.sleep(1)
    name = driver.find_element(By.CSS_SELECTOR,".Fc1rA")
    print(name.text)
profile
hello!
post-custom-banner

0개의 댓글