목차

사용 셀레늄 를 사용하는 것은 매우 흔한 일입니다. 브라우저를 자동화하고 실제 사용자 활동을 시뮬레이션하여 차단되는 것을 방지할 수 있습니다. 특히 Google과 같이 동적으로 생성된 자바스크립트 사이트를 스크래핑할 때 유용합니다. 또한, 기본적으로 실제 클라이언트의 행동을 시뮬레이션하기 때문에 크롤링 보호를 피하는 데 도움이 됩니다.

이 문서에서는 1000페이지가 넘는 페이지에서도 차단되지 않고 Google 지도에서 장소를 구문 분석할 수 있는 스크레이퍼를 개발하는 단계별 튜토리얼을 보여드립니다.

셀레늄의 스크래치 구글 지도
셀레늄으로 크롬 브라우저 제어하기

크롤러를 구축하는 데 필요한 사항

  1. Python 3+.
  2. Chrome 브라우저가 설치되어 있습니다.
  3. 셀레늄 3.141.0+(파이썬 패키지).
  4. Chrome 드라이버(사용 중인 OS용).
  5. 파셀 또는 기타 라이브러리를 사용하여 Beautiful Soup과 같은 HTML에서 데이터를 추출할 수 있습니다.

Google 지도 추출기를 구축하는 단계별 자습서

ChromeDriver 다운로드 및 저장

Google Chrome에서 Selenium을 사용하려면 다음을 사용하여 파이썬 코드를 브라우저에 연결해야 합니다. 크롬 드라이버.

사용 중인 브라우저 버전과 OS 유형에 맞는 ChromeDriver 버전을 다운로드하세요. Chrome 브라우저 버전 번호는 여기에서 확인할 수 있습니다: 크롬 -> 메뉴 아이콘(오른쪽 상단 모서리) -> 도움말 -> 구글 크롬 정보.

크롬드라이버 파일의 보관을 해제하고 시스템 어딘가에 저장합니다(나중에 사용할 경로). 이 튜토리얼 예제에서는 프로젝트 폴더에 파일을 저장합니다.

셀레늄 및 파셀 패키지 설치하기

다음 명령을 실행하여 셀레늄과 파셀 패키지를 설치합니다. 나중에 HTML에서 콘텐츠를 구문 분석할 때 Parsel을 사용할 것입니다.

				
					pip install selenium
pip install parsel # to extract data from HTML using XPath or CSS selectors
				
			

웹 드라이버 초기화 및 시작

웹드라이버를 초기화하기 전에 이전 단계를 수행했는지, 크롬드라이버 파일 경로가 있는지 확인하세요. 다음 코드를 사용하여 드라이버를 초기화합니다. 새 Chrome 창이 열리는 것을 볼 수 있습니다.

				
					from selenium import webdriver


chromedrive_path = './chromedriver' # use the path to the driver you downloaded from previous steps
driver = webdriver.Chrome(chromedrive_path)
				
			

Mac에서는 다음과 같은 메시지가 표시될 수 있습니다: "개발자를 확인할 수 없으므로 크롬드라이버를 열 수 없습니다". 이 문제를 해결하려면 Finder에서 크롬드라이버를 클릭하고 메뉴에서 열기를 선택한 다음 표시되는 대화 상자에서 열기를 클릭합니다. 열린 터미널 창에 "ChromeDriver가 성공적으로 시작되었습니다"라는 메시지가 표시됩니다. 이 창을 닫으면 코드에서 크롬드라이버를 시작할 수 있습니다.

Google 지도 페이지 다운로드

드라이버를 시작하면 일부 페이지를 열 준비가 된 것입니다. 페이지를 열려면 "get" 명령을 사용합니다.

				
					url = 'https://www.google.com/maps/search/bars+near+NY,+USA/@40.7443439,-74.0197995,13z'
driver.get(url)
				
			

지도 검색 콘텐츠 구문 분석

페이지가 열리면 브라우저 창에 파이썬 코드로 제어되는 페이지가 표시됩니다. 다음 코드를 실행하여 ChromeDriver에서 HTML 페이지 콘텐츠를 가져올 수 있습니다.

				
					page_content = driver.page_source
				
			

HTML 콘텐츠를 편하게 보려면 브라우저 창의 오른쪽 상단 모서리에 있는 Chrome 메뉴를 열고 추가 도구 > 개발자 도구를 선택하여 Chrome에서 개발자 콘솔을 엽니다. 이제 페이지의 요소를 볼 수 있을 것입니다.

Google 지도 HTML 구문 분석
개발자 콘솔로 원하는 요소에 대한 XPath 찾기

자주 사용하는 구문 분석 도구를 사용하여 HTML 페이지의 콘텐츠를 구문 분석할 수 있습니다. 여기서는 파셀 를 클릭하세요.

				
					from parsel import Selector

response = Selector(page_content)
				
			

숙소 목록을 반복하여 각 장소의 데이터를 가져옵니다.

				
					results = []

for el in response.xpath('//div[contains(@aria-label, "Results for")]/div/div[./a]'):
    results.append({
        'link': el.xpath('./a/@href').extract_first(''),
        'title': el.xpath('./a/@aria-label').extract_first('')
    })
    
print(results)
				
			

Google 지도 장소의 출력(단축).

				
					[
  {
    'link': 'https://www.google.com/maps/place/Black+Iron+Burger/data=!4m5!3m4!1s0x89c259acf2c7299d:0x149a07481483ce!8m2!3d40.7542649!4d-73.990364?authuser=0&hl=en&rclk=1',
    'title': 'Black Iron Burger'
  },
  {
    'link': 'https://www.google.com/maps/place/Fools+Gold+NYC/data=!4m5!3m4!1s0x89c259846e633763:0x69420cb6024065f9!8m2!3d40.723028!4d-73.989794?authuser=0&hl=en&rclk=1',
    'title': 'Fools Gold NYC'
  },
  {
    'link': 'https://www.google.com/maps/place/11th+St.+Bar/data=!4m5!3m4!1s0x89c25976492b11ff:0x14f9cacdef3eb7c1!8m2!3d40.7280546!4d-73.9812525?authuser=0&hl=en&rclk=1',
    'title': '11th St. Bar'
  },
  ...
]
				
			

추출 프로세스가 완료되면 드라이버를 중지합니다.

스크래핑 전후에 드라이버를 적절히 시작하고 중지하는 것이 중요합니다. 인터넷 서핑을 하기 전과 후에 브라우저를 열고 닫는 것과 같은 원리입니다. 다음 코드를 실행하여 드라이버를 닫습니다.

				
					driver.quit()
				
			

스크레이퍼 확장 및 더 강력한 스크레이퍼 만들기에 대한 결론 및 권장 사항

Google 지도의 까다로운 HTML 구조에도 불구하고 셀레늄과 XPath 및 CSS 선택기에 대한 지식만 있으면 스크래핑에서 꽤 좋은 결과를 얻을 수 있습니다. 브라우저 에뮬레이터를 사용하는 이 방법은 차단되는 것을 방지할 수 있습니다. 그러나 애플리케이션을 확장하려는 경우 예상치 못한 문제를 피하기 위해 프록시를 사용하는 것도 고려할 수 있습니다.

병렬 실행

멀티 스레딩이 아닌 멀티 프로세싱으로 드라이버를 실행할 수 있지만 각 드라이버는 하나의 CPU를 소비합니다. 드라이버가 충분한지 확인하세요.

엔터프라이즈 규모에서 Google 지도를 스크랩하는 최고의 방법

Google 스크래핑은 상당히 어려운 작업이기 때문에 많은 기업과 대기업은 자체 크롤러를 개발하고 유지 관리하는 데 시간을 들이지 않고도 수백만 개의 페이지를 스크래핑하기를 원합니다.

Google 지도 스크랩을 시작하는 가장 쉬운 방법은 다음을 사용하는 것입니다. Outscraper 플랫폼 (CSV 파일로 결과를 얻으려면)을 클릭합니다, API또는 SDK (코드에 통합하기 위해).

Google 지도 스크래핑을 시작하는 가장 쉬운 방법

다음 명령을 실행하여 Outscraper의 SDK를 설치합니다.

				
					pip install google-services-api
				
			

클라이언트를 초기화하고 Google에서 숙소를 검색하거나 장소 ID를 전송하여 특정 숙소를 구문 분석합니다.

*에서 API 토큰(SECRET_API_KEY)을 얻을 수 있습니다. 프로필 페이지

				
					from outscraper import ApiClient

api_client = ApiClient(api_key='SECRET_API_KEY')

# Search for businesses in specific locations:
result = api_client.google_maps_search('restaurants brooklyn usa', limit=20, language='en')

# Get data of the specific place by id
result = api_client.google_maps_search('ChIJrc9T9fpYwokRdvjYRHT8nI4', language='en')

# Search with many queries (batching)
result = api_client.google_maps_search([
    'restaurants brooklyn usa',
    'bars brooklyn usa',
], language='en')

print(result)
				
			

결과 출력(단축).

				
					[
  [
    {
      "name": "Colonie",
      "full_address": "127 Atlantic Ave, Brooklyn, NY 11201",
      "borough": "Brooklyn Heights",
      "street": "127 Atlantic Ave",
      "city": "Brooklyn",
      "postal_code": "11201",
      "country_code": "US",
      "country": "United States of America",
      "us_state": "New York",
      "state": "New York",
      "plus_code": null,
      "latitude": 40.6908464,
      "longitude": -73.9958422,
      "time_zone": "America/New_York",
      "popular_times": null,
      "site": "http://www.colonienyc.com/",
      "phone": "+1 718-855-7500",
      "type": "American restaurant",
      "category": "restaurants",
      "subtypes": "American restaurant, Cocktail bar, Italian restaurant, Organic restaurant, Restaurant, Wine bar",
      "posts": null,
      "rating": 4.6,
      "reviews": 666,
      "reviews_data": null,
      "photos_count": 486,
      "google_id": "0x89c25a4590b8c863:0xc4a4271f166de1e2",
      "place_id": "ChIJY8i4kEVawokR4uFtFh8npMQ",
      "reviews_link": "https://search.google.com/local/reviews?placeid=ChIJY8i4kEVawokR4uFtFh8npMQ&q=restaurants+brooklyn+usa&authuser=0&hl=en&gl=US",
      "reviews_id": "-4277250731621359134",
      "photo": "https://lh5.googleusercontent.com/p/AF1QipN_Ani32z-7b9XD182oeXKgQ-DIhLcgL09gyMZf=w800-h500-k-no",
      "street_view": "https://lh5.googleusercontent.com/p/AF1QipN_Ani32z-7b9XD182oeXKgQ-DIhLcgL09gyMZf=w1600-h1000-k-no",
      "working_hours_old_format": "Monday: 5\\u20139:30PM | Tuesday: Closed | Wednesday: Closed | Thursday: 5\\u20139:30PM | Friday: 5\\u20139:30PM | Saturday: 11AM\\u20133PM,5\\u20139:30PM | Sunday: 11AM\\u20133PM,5\\u20139:30PM",
      "working_hours": {
        "Monday": "5\\u20139:30PM",
        "Tuesday": "Closed",
        "Wednesday": "Closed",
        "Thursday": "5\\u20139:30PM",
        "Friday": "5\\u20139:30PM",
        "Saturday": "11AM\\u20133PM,5\\u20139:30PM",
        "Sunday": "11AM\\u20133PM,5\\u20139:30PM"
      },
      "business_status": "OPERATIONAL",
      },
      "reserving_table_link": "https://resy.com/cities/ny/colonie",
      "booking_appointment_link": "https://resy.com/cities/ny/colonie",
      "owner_id": "114275131377272904229",
      "verified": true,
      "owner_title": "Colonie",
      "owner_link": "https://www.google.com/maps/contrib/114275131377272904229",
      "location_link": "https://www.google.com/maps/place/Colonie/@40.6908464,-73.9958422,14z/data=!4m8!1m2!2m1!1sColonie!3m4!1s0x89c25a4590b8c863:0xc4a4271f166de1e2!8m2!3d40.6908464!4d-73.9958422"
      ...
    },
   ...
  ]
]
				
			

추가: Google 리뷰 스크래핑을 시작하는 가장 쉬운 방법

다음 코드를 실행하여 리뷰를 추출할 수 있습니다(파이썬 패키지를 설치하고 클라이언트를 시작했다고 가정합니다).

				
					# Get reviews of the specific place by id
result = api_client.google_maps_reviews('ChIJrc9T9fpYwokRdvjYRHT8nI4', reviewsLimit=20, language='en')

# Get reviews for places found by search query
result = api_client.google_maps_reviews('Memphis Seoul brooklyn usa', reviewsLimit=20, limit=500, language='en')

# Get only new reviews during last 24 hours
from datetime import datetime, timedelta
yesterday_timestamp = int((datetime.now() - timedelta(1)).timestamp())

result = api_client.google_maps_reviews(
    'ChIJrc9T9fpYwokRdvjYRHT8nI4', sort='newest', cutoff=yesterday_timestamp, reviewsLimit=100, language='en')
				
			

결과 출력(단축).

				
					{
  "name": "Memphis Seoul",
  "address": "569 Lincoln Pl, Brooklyn, NY 11238, \\u0421\\u043f\\u043e\\u043b\\u0443\\u0447\\u0435\\u043d\\u0456 \\u0428\\u0442\\u0430\\u0442\\u0438",
  "address_street": "569 Lincoln Pl",
  "owner_id": "100347822687163365487",
  "owner_link": "https://www.google.com/maps/contrib/100347822687163365487",
  ...
  "reviews_data": [
    {
      "google_id": "0x89c25bb5950fc305:0x330a88bf1482581d",
      "autor_link": "https://www.google.com/maps/contrib/112314095435657473333?hl=en-US",
      "autor_name": "Eliott Levy",
      "autor_id": "112314095435657473333",
      "review_text": "Very good local comfort fusion food ! \\nKimchi coleslaw !! Such an amazing idea !",
      "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s112314095435657473333!2s0x0:0x330a88bf1482581d?hl=en-US",
      "review_rating": 5,
      "review_timestamp": 1560692128,
      "review_datetime_utc": "06/16/2019 13:35:28",
      "review_likes": null
    },
    {
      "google_id": "0x89c25bb5950fc305:0x330a88bf1482581d",
      "autor_link": "https://www.google.com/maps/contrib/106144075337788507031?hl=en-US",
      "autor_name": "fenwar1",
      "autor_id": "106144075337788507031",
      "review_text": "Great wings with several kinds of hot sauce. The mac and cheese ramen is excellent.\\nUPDATE:\\nReturned later to try the meatloaf slider, a thick meaty slice  topped with slaw and a fantastic sauce- delicious. \\nConsider me a regular.\\ud83d\\udc4d",
      "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s106144075337788507031!2s0x0:0x330a88bf1482581d?hl=en-US",
      "review_rating": 5,
      "review_timestamp": 1571100055,
      "review_datetime_utc": "10/15/2019 00:40:55",
      "review_likes": null
    },
    ...
  ]
}
				
			

자주하는 질문

가장 자주 묻는 질문과 답변

Outscraper의 SDK 덕분에 파이썬 셀레늄으로 구글 지도 데이터를 스크랩할 수 있습니다. Outscraper Google 지도 장소 API 설명서를 확인하여 무엇을 할 수 있는지 알아보세요.

파이썬과 셀레늄을 사용하면 구글 지도에서 데이터를 스크랩하는 프로세스를 자동화할 수 있습니다. Outscraper는 Google 지도 장소 API 및 이 작업을 간소화하는 SDK를 제공합니다.

Python과 셀레늄을 사용하여 Google 지도 스크래핑을 자동화할 수 있습니다. Outscraper Google 지도 장소 API SDK를 사용하면 가장 쉬운 방법으로 이 작업을 수행할 수 있습니다.

카테고리: 파이썬

Vlad

프로젝트 관리자 링크드인

0 댓글

답글 남기기

아바타 자리 표시자