프로그래밍 언어/Python

맛집 검색 자동화하기

· 코딩마이데이

미쉐린 가이드에 소개된 적 있는 서울의 레스토랑을 검색하고 지도에 위치를 표시해 볼 것입니다. playwright 패키지와 크로미움 웹 브라우저를 사용하여 네이버 지도에서 맛집 검색을 자동화하는 코드를 작성합니다.

 

비주얼 스튜디오 코드에서 새로운 파일을 생성하고 파일명을 'step_1_2.py'로 변경한 다음 코드를 작성합니다.

 

01 새로 생성한 파일 'step_1_2.py'에 Playwright 객체를 생성하고 웹 브라우저를 실행하는 함수 run_playwright()를 작성합니다.

from playwright.sync_api import Browser, Page, Playwright, sync_playwright

def run_playwright(slow_mo: float = None) -> tuple[Playwright, Browser, Page]:
    play: Playwright = sync_playwright().start() # Playwright 객체 생상
    browser: Browser = play.chromium.launch( # Browser 객체 생성
        args=["--start-maximized"], # 웹 브라우저 최대화
        headless=False,
        slow_mo=slow_mo, # 자동화 처리 지연 시간
    )
    page: Page = browser.new_page(no_viewport=True) # Pagee 객체 생성
    return play, browser, page

 

02 함수 run_playwright()를 호출하고 크로미움 브라우저에서 네이버 지도에 접속하기 위해 소스 코드 'step_1_2.py'에서 다음과 같이 이어서 작성한 뒤 비주얼 스튜디오 코드의 실행 아이콘을 클릭합니다.

if __name__ == "__main__":
    play, browser, page = run_playwright()
    page.goto("https://map.naver.com") # 페이지 이동
    page.pause() # 인스펙터 실행

    browser.close() # Browser 객체 삭제
    play.stop() # Playwright 객체 삭재

 

03 크로미움 브라우저가 열리고 인스펙터가 생성되면, 인스펙터의 [Record] 버튼을 눌러 녹화를 시작합니다. 검색창에 '미쉐린 서울'이라고 입력하고 Enter 키를 눌러 검색합니다.

 

04 인스펙션 [Record] 버튼을 다시 클릭하여 녹화를 중지합니다. 창에 미쉐린 서울 검색을 자동화하는 코드가 생성되었습니다.

 

 

소스 코드 'step_1_2.py'와 playwright 인스펙션를 사용해 생성한 코드를 사용해 다음과 같이 네이버 지도에 '미쉐린 서울'을 검색하는 함수 search_map()을 작성해 보겠습니다. 이때 Enter 키를 누르는 코드는 제대로 붙여 넣지 않고, 조금 변형해서 작성해야 합니다.

 

비주얼 스튜디오 코드에서 새로운 파일을 생성하고 파일명을 'step_1_3.py'로 변경합니다. 그런 다음 다음과 같이 코드를 작성한 뒤, 실행 아이콘을 클릭합니다. 크로미움 브라우저가 열리며 네이버 지도에 '미쉐린 서울'로 검색한 결과가 보일 것입니다.

from playwright.sync_api import Browser, Page, Playwright, sync_playwright
from step_1_2 import run_playwright # 이전에 작성한 모듈을 불러옵니다.

def search_map(kwd: str) -> tuple[Playwright, Browser, Page]: # 04
    play, browser, page = run_playwright(slow_mo=1000) # 웹 브라우저 실행
    page.goto("https://map.naver.com") # 페이지 이동
    page.get_by_label("장소, 버스, 지하철, 도로 검색").click() # 검색창 클릭 # 07
    page.get_by_label("장소, 버스, 지하철, 도로 검색").fill(kwd) # 키워드 검색 # 08
    page.keyboard.press("Enter") # [Enter] 키 입력 # 09
    return play, browser, page

if __name__ == "__main__":
    play, browser, page = search_map("미쉐린 서울") # 네이버 지도에서 키워드 검색
    page.pause() # 인스펙터 실행
    browser.close() # Browser 객체 삭제
    play.stop() # Playwright 객체 삭제

 

실행 결과

 

04 네이버 지도에 주어진 키워드를 검색하는 함수 search_map()을 정의합니다.

07~08 playwright의 인스펙터를 사용해 생성한 코드를 붙여 넣고, '미쉐린 서울'은 매개 변수 'kwd'로 대체합니다.

09 Enter 키를 입력하기 위해 Page 객체의 keyboard.press("Enter") 함수를 호출합니다.