본문 바로가기
개발/Python

[Crawl] 파이썬 셀레니움과 bs4를 이용한 네이버 지도 크롤링 [1] (Naver Place) with selenium and BeautifulSoup

by 또버깅 2024. 3. 14.
반응형

네이버 지도에서 가게 정보를 가져오는 크롤링을 만들면서 정리한 글입니다.

(다른 곳 크롤링보다 네이버 지도의 크롤링이 까다로웠습니다. iframe 이동, 어떤 주기로 인한 클래스네임 변경 및 xpath가 다른 예외.. 등등)

 

크롤링 과정을 간단하게 설명하겠습니다.

  1. 네이버 지도 url을 크롬드라이버를 통해 연다.
  2. 검색창에 지역명을 입력한다.
  3. 나오는 가게들을 순차적으로 클릭하여 나오는 정보들을 크롤링한다.

 


그럼 시작 하겠습니다.

 

먼저, 아래 링크에서 자신의 크롬 버전에 맞는 드라이버를 다운로드 하겠습니다.

https://chromedriver.chromium.org/downloads

 

ChromeDriver - WebDriver for Chrome - Downloads

Current Releases If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading. For older versions of Chrome, please se

chromedriver.chromium.org

 

자신의 크롬 버전은

1. 크롬에서 오른쪽 상단에 위치한 점 세개를 클릭

2. 도움말 - chrome 정보 클릭

3. 가운데 크롬 버전 확인


 

크롤링에 필요한 라이브러리를 설치

# 크롤링하기 위한 라이브러리
pip install selenium
pip install bs4
# 크롬드라이버를 위한 라이브러리
pip install webdriver_manager

 

 

그 후 필요한 라이브러리 import

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd

 

 

크롬 옵션 및 드라이버 설정을 위한 함수를 만든다.

# 크롬 옵션 및 드라이버 설정
def chrome_driver():
    #브라우저 꺼짐 방지 (크롬 옵션)
    global chrome_options
    chrome_options = Options()
    chrome_options.add_experimental_option("detach", True)

    #크롬 웹드라이버 불러오기
    global service
    global driver
    service = Service(executable_path=ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=chrome_options)

 

크롬 드라이버를 전역변수(global)로 선언한 이유는 다른 함수 내에서도 driver를 사용하기 위함입니다.

( *주의* 전역 변수는 어느 함수에서나 사용할 수 있기 때문에 실수를 일으키기 쉽습니다. 그러므로, 되도록이면 전역 변수를 사용 안 하는 것이 좋습니다.)

 


 

 

이제 모든 크롬 드라이버 및 설정들을 잡아줬으니 [2]편에서 본격적인 크롤링을 시작하겠습니다.

반응형

댓글