Daftar Isi

Menggunakan Selenium dalam pengikisan data adalah hal yang cukup umum. Ini mengotomatiskan peramban dan memungkinkan Anda untuk mensimulasikan aktivitas pengguna yang sebenarnya untuk menghindari pemblokiran. Ini sangat membantu saat mengikis situs yang dibuat secara dinamis oleh JavaScript seperti Google. Selain itu, ini membantu untuk menghindari segala jenis perlindungan perayapan karena pada dasarnya mensimulasikan perilaku klien yang sebenarnya.

Dalam artikel ini, Anda akan melihat tutorial langkah demi langkah untuk mengembangkan scraper yang akan dapat mengurai tempat dari Google Maps tanpa diblokir bahkan setelah 1000+ halaman.

scrpae google maps oleh selenium
Mengontrol Browser Chrome Dengan Selenium

Apa yang Kita Perlukan untuk Membangun Perayap

  1. Python 3+.
  2. Peramban Chrome terpasang.
  3. Selenium 3.141.0+ (paket python).
  4. Driver Chrome (untuk OS Anda).
  5. Parsel atau library lain untuk mengekstrak data dari HTML seperti Beautiful Soup.

Tutorial Langkah demi Langkah untuk Membangun Ekstraktor Google Maps

Unduh dan Simpan ChromeDriver

Untuk menggunakan Selenium dengan Google Chrome, Anda perlu menautkan kode python ke browser dengan menggunakan ChromeDriver.

Unduh versi ChromeDriver yang sesuai dengan versi browser dan jenis OS Anda. Nomor versi browser Chrome Anda dapat ditemukan di sini: Chrom -> Ikon menu (pojok kanan atas) -> Bantuan -> Tentang Google Chrome.

Unarchive file chromedriver dan simpan di suatu tempat di sistem Anda (jalur yang akan kita gunakan nanti). Dalam contoh tutorial ini, kita menyimpan file di folder proyek.

Instal Paket Selenium Dan Parsel

Instal paket Selenium dan Parsel dengan menjalankan perintah berikut. Kita akan menggunakan Parsel nanti ketika kita akan mengurai konten dari HTML.

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

Inisialisasi Dan Mulai Webdriver

Sebelum menginisialisasi Webdriver, pastikan Anda telah melakukan langkah-langkah sebelumnya dan Anda memiliki jalur ke file chromedriver. Inisialisasi driver dengan kode berikut. Anda akan melihat jendela Chrome baru terbuka.

				
					from selenium import webdriver


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

Pada mac, Anda mungkin melihat yang berikut ini: "chromedriver tidak dapat dibuka karena pengembang tidak dapat diverifikasi". Untuk mengatasi masalah ini-klik chromedriver di Finder, pilih Open dari menu, lalu klik Open pada dialog yang muncul. Anda akan melihat "ChromeDriver berhasil dijalankan" di jendela terminal yang terbuka. Tutup jendela tersebut dan setelah itu, Anda akan dapat menjalankan ChromeDriver dari kode Anda.

Unduh Halaman Google Maps

Setelah Anda menjalankan driver, Anda siap untuk membuka beberapa halaman. Untuk membuka halaman mana pun, gunakan perintah "get".

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

Mengurai Konten Pencarian Peta

Setelah halaman Anda dibuka, Anda akan melihat halaman di jendela browser Anda yang dikendalikan oleh kode python Anda. Anda dapat menjalankan kode berikut untuk mendapatkan konten halaman HTML dari ChromeDriver.

				
					page_content = driver.page_source
				
			

Untuk melihat konten HTML dengan nyaman, buka konsol pengembang di Chrome dengan membuka Menu Chrome di sudut kanan atas jendela peramban dan pilih More Tools > Developer Tools. Sekarang Anda seharusnya dapat melihat elemen-elemen halaman Anda.

penguraian HTML peta google
Menemukan XPath ke Elemen yang Ingin Kita Dapatkan Dengan Konsol Pengembang

Anda dapat mengurai konten dari halaman HTML dengan menggunakan alat parsing favorit Anda. Kita akan menggunakan Parsel dalam tutorial ini.

				
					from parsel import Selector

response = Selector(page_content)
				
			

Lakukan pengulangan pada daftar dan dapatkan data setiap tempat.

				
					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)
				
			

Keluaran dari tempat Google Maps (disingkat).

				
					[
  {
    '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'
  },
  ...
]
				
			

Hentikan Pengemudi Setelah Proses Ekstraksi Selesai

Sangat penting untuk memulai dan menghentikan driver sebelum dan sesudah pengikisan secara tepat. Hal ini sama seperti Anda membuka dan menutup peramban sebelum dan sesudah berselancar di internet. Tutup driver dengan menjalankan kode berikut.

				
					driver.quit()
				
			

Kesimpulan dan Rekomendasi tentang Penskalaan dan Membuat Scraper Lebih Kuat

Meskipun struktur HTML Google Maps rumit, dengan Selenium dan pengetahuan yang baik tentang XPath dan selektor CSS, Anda dapat mencapai hasil yang cukup baik dalam scraping. Metode menggunakan emulator browser ini akan melindungi Anda dari pemblokiran. Namun, jika Anda akan menskalakan aplikasi Anda, Anda mungkin mempertimbangkan untuk menggunakan proxy juga untuk menghindari beberapa masalah yang tidak terduga.

Berjalan secara Paralel

Anda dapat menjalankan driver dalam multiprocessing (bukan multithreading) tetapi setiap driver akan menggunakan satu CPU. Pastikan Anda memiliki cukup CPU.

Cara Utama Scraping Google Maps pada Skala Perusahaan

Karena scraping Google mungkin cukup menantang, banyak perusahaan dan perusahaan besar ingin mulai scraping jutaan halaman tanpa menghabiskan waktu untuk mengembangkan dan memelihara crawler mereka sendiri.

Cara termudah untuk memulai scraping Google Maps adalah menggunakan Platform Outscraper (untuk mendapatkan hasil dalam file CSV), API, atau SDK (untuk diintegrasikan ke dalam kode).

Cara Termudah Memulai Dengan Google Maps Scraping

Instal SDK Outscraper dengan menjalankan perintah berikut.

				
					pip install google-services-api
				
			

Inisialisasi klien dan mencari daftar di Google atau mengurai daftar tertentu dengan mengirimkan ID tempat.

* Anda bisa mendapatkan token API (SECRET_API_KEY) dari halaman profil

				
					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)
				
			

Keluaran hasil (disingkat).

				
					[
  [
    {
      "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"
      ...
    },
   ...
  ]
]
				
			

Ekstra: Cara termudah untuk Memulai dengan Google Reviews Scraping

Anda dapat mengekstrak ulasan dengan menjalankan kode berikut (diasumsikan Anda telah menginstal paket python dan memulai klien).

				
					# 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')
				
			

Keluaran hasil (disingkat).

				
					{
  "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
    },
    ...
  ]
}
				
			

FAQ

Pertanyaan dan jawaban paling sering

Berkat SDK Outscraper, Anda dapat mengikis data Google Maps dengan Python Selenium. Lihat dokumentasi API Google Maps Places Outscraper untuk mengetahui apa saja yang dapat Anda lakukan.

Dengan menggunakan Python dan Selenium, dimungkinkan untuk mengotomatiskan proses pengikisan data dari Google Maps. Outscraper menawarkan Google Maps Places API dan SDK yang menyederhanakan tugas ini.

Anda dapat mengotomatiskan scraping Google Maps menggunakan Python dan Selenium. Outscraper Google Maps Places API dan SDK memungkinkan Anda melakukan ini dengan cara termudah.

Kategori: Python

Vlad

Manajer Proyek Linkedin

0 Komentar

Tinggalkan Balasan

Tempat penampung avatar