Python을 사용하여 Google 트렌드 데이터를 스크랩하는 방법

댓글: 0

Python과 Playwright를 사용하여 Google 트렌드에서 데이터를 스크랩하면 키워드 인기도를 자세히 조사하고 시간 경과에 따른 트렌드 변화를 모니터링할 수 있습니다. 이러한 접근 방식은 마케팅 분석을 위한 중요한 인사이트를 제공합니다.

전제 조건

코드를 살펴보기 전에 다음 도구가 설치되어 있는지 확인하세요:

  • Python 3.7+;
  • 플레이라이터 라이브러리.

pip를 사용하여 Playwright를 설치할 수 있습니다:

pip install playwright

비동기 코드와 함께 Playwright를 사용하려면 Python 3.7 이상에 기본적으로 포함되어 있는 asyncio 라이브러리도 필요합니다.

Google 트렌드 작업을 위한 Playwright 구성하기

강력한 브라우저 자동화 도구인 Playwright를 사용하여 Google 트렌드 웹사이트를 탐색하고 트렌드 데이터가 포함된 CSV 파일을 다운로드하겠습니다. 이 튜토리얼에서는 전체 과정을 안내합니다.

Playwright 설치

먼저 Playwright가 설치되어 있는지 확인합니다:

playwright install

모든 브라우저를 설치하지 않으려면 이 명령을 사용하여 크롬 브라우저만 설치하면 됩니다.

playwright install chromium

프록시 구성

봇 활동에 적극적으로 대응하는 Google과 같은 플랫폼을 스크래핑할 때는 프록시를 사용하는 것이 필수적입니다. 프록시는 IP 로테이션을 가능하게 하여 차단될 위험을 줄여줍니다. 저희 스크립트에서는 비공개 프록시를 사용하여 요청을 라우팅합니다.

proxy = {
    "server": "IP:PORT",
    "username": "your_username",
    "password": "your_password"
}

변수 IP, PORT, 사용자 이름 및 비밀번호를 프록시 서버의 실제 데이터로 바꿉니다.

플레이라이터로 작업하는 단계별 프로세스

이 예제에서는 먼저 google.com으로 이동하여 잠재적인 차단을 우회한 후 Google 트렌드 페이지로 이동합니다. 이는 정상적인 사용자 행동을 모방하여 탐지를 피하기 위한 것입니다.

1단계: Google 트렌드 작업 준비하기

이 단계에서는 Google에 의해 플래그가 지정되고 차단되는 것을 방지하기 위한 사전 조치를 취합니다:

  • 브라우저 시작: 프록시 설정으로 구성된 Chromium 브라우저 인스턴스를 시작합니다. 프록시를 사용하면 스크래핑 활동을 일반 브라우저 사용으로 위장하여 탐지 가능성을 줄이는 데 도움이 됩니다.
  • Google로 이동: 먼저 google.com에 접속하면 Google의 추적 시스템이 새 사용자로 인식하는 사용자의 존재에 적응하게 됩니다. 이 간단한 탐색 단계는 이후 활동이 봇과 유사한 것으로 분류될 가능성을 낮추어 즉각적인 차단을 피할 수 있습니다.
import asyncio
from playwright.async_api import Playwright, async_playwright

async def run(playwright: Playwright) -> None:
    # 프록시 설정으로 브라우저 실행하기
    browser = await playwright.chromium.launch(headless=False, proxy={
        "server": "IP:PORT",
        "username": "your_username",
        "password": "your_password"
    })
    
    # 새 브라우저 컨텍스트 만들기
    context = await browser.new_context()
    
    # 새 페이지 열기
    page = await context.new_page()
    
    # 일반 브라우징을 모방하기 위해 Google 방문
    await page.goto("https://google.com")

2단계: Google 트렌드에서 데이터 탐색 및 다운로드

다음으로 필요한 데이터가 있는 Google 트렌드 페이지로 바로 이동합니다. Google 트렌드는 데이터를 CSV 형식으로 직접 다운로드할 수 있는 옵션을 제공하여 추출 프로세스를 용이하게 합니다. '다운로드' 버튼을 클릭하는 작업을 자동화하여 데이터 다운로드를 시작합니다. 이렇게 하면 수동 개입 없이 트렌드 데이터를 추출할 수 있습니다. '다운로드' 버튼이 표시되면 자동화가 이를 클릭하여 필요한 트렌드 데이터가 포함된 CSV 파일 다운로드를 시작해야 합니다.

 # Google 트렌드로 이동하기
    await page.goto("https://trends.google.com/trends/explore?q=%2Fg%2F11bc6c__s2&date=now%201-d&geo=US&hl=en-US")
    
    # 다운로드 버튼을 기다렸다가 클릭
    async with page.expect_download() as download_info:
        await page.get_by_role("button", name="file_download").first.click()
    
    # 다운로드 처리하기
    download = await download_info.value
    print(download.suggested_filename)

3단계: 데이터 저장 및 세션 종료

다운로드한 CSV 파일은 로컬 장치의 지정된 디렉터리에 자동으로 저장됩니다.

 # 다운로드한 파일 저장하기
    await download.save_as("/path/to/save/" + download.suggested_filename)

완전한 코드 예제

다음은 Playwright를 사용하여 Google 트렌드 데이터를 CSV 파일로 다운로드하는 전체 코드입니다:

import asyncio
import os
import re
from playwright.async_api import Playwright, async_playwright


async def run(playwright: Playwright) -> None:
   # 프록시 설정으로 브라우저 실행
   browser = await playwright.chromium.launch(headless=False, proxy={
       "server": "IP:PORT",
       "username": "your_username",
       "password": "your_password"
   })

   # 새 브라우저 컨텍스트 만들기
   context = await browser.new_context()

   # 새 페이지 열기
   page = await context.new_page()

   # 탐지되지 않으려면 Google을 방문하세요.
   await page.goto("https://google.com")

   # Google 트렌드로 이동
   await page.goto("https://trends.google.com/trends/explore?q=%2Fg%2F11bc6c__s2&date=now%201-d&geo=US&hl=en-US")

   # 다운로드 버튼을 클릭합니다.
   async with page.expect_download() as download_info:
       await page.get_by_role("button", name=re.compile(r"file_download")).first.click()

   # 다운로드한 파일 저장
   download = await download_info.value
   destination_path = os.path.join("path/to/save", download.suggested_filename)
   await download.save_as(destination_path)

   # 컨텍스트와 브라우저를 닫습니다.
   await context.close()
   await browser.close()


async def main() -> None:
   async with async_playwright() as playwright:
       await run(playwright)


asyncio.run(main())

이 가이드에 따라 트렌드 데이터를 효율적으로 다운로드하고, 프록시 로테이션을 관리하고, 봇 보호 메커니즘을 우회할 수 있습니다. 효과적인 차단 회피를 위해서는 신뢰할 수 있는 프록시 서버를 사용하는 것이 중요합니다. 동적 IP 주소를 제공하고 로테이션 구성이 필요 없는 주거용 프록시를 적극 권장합니다. 또는 필요한 수의 IP를 구매하고 스크립트에서 정기적인 IP 로테이션을 설정하는 정적 ISP 프록시도 효과적입니다. 어느 쪽을 선택하든 차단 및 캡차 위험을 최소화하여 더 빠르고 원활하게 데이터를 스크랩할 수 있습니다.

댓글:

0 댓글