Hyun's Wonderwall

[데이터 엔지니어링] Playwright으로 네이버 플레이스 리뷰 동적 크롤링하기 본문

Study/Data Engineering

[데이터 엔지니어링] Playwright으로 네이버 플레이스 리뷰 동적 크롤링하기

Hyun_! 2025. 3. 31. 17:00

데이터 엔지니어링 과목 프로젝트에서 네이버 플레이스의 리뷰 데이터를 수집하는 역할을 맡았다.

 

[크롤링 방식] - 정적 크롤링(Static Crawling), 동적 크롤링(Dynamic Crawling)

  • 정적 크롤링: 서버에서 전달받은 고정된 HTML 소스코드에서 필요한 데이터를 파싱하는 방식.
  • 동적 크롤링: JavaScript 실행 이후에 생성되는 요소나, 사용자 인터랙션(스크롤, 버튼 클릭 등)을 통해 로드되는 데이터를 처리하는 방식. 일반적인 HTTP 요청만으로는 접근이 불가능한 정보를 수집할 때 사용됨.

우리가 수집하려는 네이버 플레이스 리뷰 페이지는 탭 구성과 더보기 버튼 기반의 페이지네이션 구조를 가지고 있어 동적으로 데이터가 로드된다. 따라서 동적 크롤링이 필수적이다.

 

[동적 크롤링을 위한 Python 라이브러리] - Selenium, Playwright

  • Selenium: 널리 사용되어 왔으며 다양한 브라우저와 호환되지만, 속도가 느리고 비동기 처리가 어려움.
  • Playwright: 최신 프레임워크로, 빠른 속도, 자동화 안정성, 비동기 처리를 지원. (수업 발표에서도 Playwright가 더 적합하다는 의견이 많았음)

이러한 이유로 Playwright를 사용해 동적 크롤링을 진행하게 되었다.


1. uv 설치 및 파이썬 프로젝트 생성

파이썬 환경에서 개발을 진행한 경험이 많지 않은데, 항상 패키지 관리자로 pip를 사용했었다. 그런데 최근 uv가 뛰어나다는 말을 듣게 되어 uv를 사용해보고 싶었고, uv를 사용해 세팅을 진행하게 되었다.

자세한 uv 설명글:

https://rudaks.tistory.com/entry/python%EC%9D%98-uv-%EC%82%AC%EC%9A%A9%EB%B2%95

 

 

나는 Mac이기에 Homebrew로 전역으로 설치했다.

#맥, 리눅스
curl -LsSf https://astral.sh/uv/install.sh | sh
#Homebrew로 설치
brew install uv
#윈도우
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

 

uv init으로 파이썬 프로젝트 생성

uv init example --no-workspace #example 자리에 프로젝트명

 

playwright 설치

uv add playwright

 

실행

 

uv run main.py

 

실행하면 .venv는 자동으로 생긴다. 이제 실행할 때 pip + venv 쓸 때처럼 번거롭게 activate 작성하지 않아도 된다!

(역시 실행은 편리해야 한다..)

 

이제 음식점 장소 정보와 리뷰를 크롤링하는 app을 구축할 것인데, 구동 단계는 다음과 같다.

 

1. 서울시 OO구의 음식점을 검색하고 목록을 크롤링한.

1.1. 개별 음식점에 대해 '맛집 조건'에 부합하는지 확인한다.

       -> 해당하면 2번을 진행, 해당하지 않으면 패스

1.2. OO구마다 400개 

1.3. 업종을 확인하여 일반음식점만 선택한다.

 

2. 맛집 음식점의 장소 정보를 크롤링한다.

2.1. 이때 수집되는 데이터 종류를 파악해야 하며 2번에는 없고 1번에만 있는 데이터가 있는지 확인해야 한다.

 

3. 맛집 음식점의 리뷰를 크롤링한다.

3.1. 이때 정렬 기준은 기본인 '최신순'이며, 최대 30번의 '더보기'를 클릭해서 100개의 리뷰를 수집한다.

3.2. 오류 없이 리뷰 수집을 완료하면 전역 변수(카운팅 용) 값을 올리든 한다.

 

4. OO구의 음식점이 일정 갯수 이상 수집되면 크롤링을 종료한다.

 

1번, 2번, 3번은 개별적인 파일로 모듈화하여 사용하려고 한다.

 


 

처리해야 하는 양이 많기 때문에 비동기를 고려했다.
비동기 파일 입출력을 위해 aiofiles를 설치했다. (uv add aiofiles)

비동기 크롤링을 위해서는 asyncio를 사용하는데, 이것은 Python 3.4+ 내장이라 별도 설치할 필요 없다.