scrpae google maps oleh selenium
Mengontrol browser Chrome dengan Selenium

Menggunakan Selenium in data scraping is quite a common thing. It automates browsers and allows you to simulate real user activities to avoid getting blocked. It is specially helpful while scraping JavaScript dynamically generated sites like Google. Moreover, it helps to avoid any kind of crawling protection as it basically simulates real clients' behavior.

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.

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 (sudut 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 # untuk mengekstrak data dari HTML menggunakan XPath atau selektor CSS
				
			

Inisialisasi Dan Mulai Webdriver

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

				
					dari selenium import webdriver


chromedrive_path = './chromedriver' # gunakan jalur ke driver yang Anda unduh dari langkah sebelumnya
driver = webdriver.Chrome(chromedrive_path)
				
			

Pada mac Anda mungkin melihat yang berikut ini: "chromedriver tidak dapat dibuka karena pengembang tidak dapat diverifikasi". Untuk mengatasinya klik-kontrol chromedriver di Finder, pilih Open dari menu, lalu klik Open pada dialog yang muncul. Anda akan melihat "ChromeDriver was started successfully" di jendela terminal yang terbuka. Tutup dan setelah ini, Anda akan dapat memulai ChromeDriver dari kode Anda.

Unduh Halaman Google Maps

Once you start the driver you are ready to open some pages. To open any page, use the "get" command.

				
					url = 'https://www.google.com/maps/search/bars+dekat+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
				
			

To comfortably see the HTML content, open the developer console in Chrome by opening the Chrome Menu in the upper-right-hand corner of the browser window and selecting More Tools > Developer Tools. Now you should be able to see elements of your page.

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.

				
					dari parsel mengimpor Selector

response = Selector(page_content)
				
			

Lakukan iterasi atas daftar dan dapatkan data setiap tempat.

				
					hasil = []

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

Keluaran dari Google Maps places (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': 'Burger Besi Hitam'
  },
  {
    '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

Penting untuk memulai dan menghentikan driver sebelum dan sesudah pengikisan yang sesuai. Ini sama seperti Anda membuka dan menutup browser Anda sebelum dan sesudah berselancar di internet. Tutup driver dengan menjalankan kode berikut.

				
					driver.quit()
				
			

Kesimpulan dan Rekomendasi tentang Penskalaan dan Membuat Scraper Lebih Kuat

Despite the tricky HTML structure of Google Maps, with Selenium and a good knowledge of XPath and CSS selectors, you can achieve quite good results in scraping. This method of using a browser emulator should protect you from getting blocked. However, if you are going to scale your application you might consider using proxies as well in order to avoid some unexpected troubles.

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.

				
					dari outscraper import ApiClient

api_client = ApiClient(api_key='SECRET_API_KEY')

# Mencari bisnis di lokasi tertentu:
result = api_client.google_maps_search('restaurants brooklyn usa', limit=20, language='en')

# Dapatkan data dari tempat tertentu berdasarkan id
result = api_client.google_maps_search('ChIJrc9T9fpYwokRdvjYRHT8nI4', language='en')

# Pencarian dengan banyak kueri (batching)
result = api_client.google_maps_search([
    'restoran brooklyn usa',
    'bar brooklyn usa',
], language='en')

print(hasil)
				
			

Keluaran hasil (disingkat).

				
					[
  [
    {
      "nama": "Colonie",
      "full_address": "127 Atlantic Ave, Brooklyn, NY 11201",
      "borough": "Brooklyn Heights",
      "jalan": "127 Atlantic Ave",
      "kota": "Brooklyn",
      "postal_code": "11201",
      "kode_negara": "US",
      "negara": "Amerika Serikat",
      "us_state": "New York",
      "state": "New York",
      "plus_code": null,
      "latitude": 40.6908464,
      "bujur": -73.9958422,
      "time_zone": "America/New_York",
      "popular_times": null,
      "site": "http://www.colonienyc.com/",
      "phone": "+1 718-855-7500",
      "type": "Restoran Amerika",
      "kategori": "restoran",
      "subtipe": "Restoran Amerika, Bar koktail, Restoran Italia, Restoran organik, Restoran, Bar anggur",
      "posts": null,
      "rating": 4.6,
      "ulasan": 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": "Senin: 5\\u20139:30PM | Selasa: Tutup | Rabu: Tutup | Kamis: 5\\u20139:30PM | Jumat: 5\\u20139:30PM | Sabtu: 11:00\\u20133PM,5\\u20139:30PM | Minggu: 11:00\\u20133PM,5\\u20139:30PM",
      "working_hours": {
        "Senin": "5\\u20139:30PM",
        "Selasa": "Tutup",
        "Rabu": "Tutup",
        "Kamis": "5\\u20139:30PM",
        "Jumat": "5\\u20139:30PM",
        "Sabtu": "11AM\\u20133PM,5\\u20139:30PM",
        "Minggu": "11AM\\u20133PM,5\\u20139:30PM"
      },
      "status_bisnis": "OPERASIONAL",
      },
      "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).

				
					# Dapatkan ulasan dari tempat tertentu berdasarkan id
result = api_client.google_maps_reviews('ChIJrc9T9fpYwokRdvjYRHT8nI4', reviewsLimit=20, language='en')

# Dapatkan ulasan untuk tempat yang ditemukan oleh kueri penelusuran
result = api_client.google_maps_reviews('Memphis Seoul brooklyn usa', reviewsLimit=20, limit=500, language='en')

# Dapatkan hanya ulasan baru selama 24 jam terakhir
from datetime import datetime, timedelta
yesterday_timestamp = int((datetime.now() - timedelta(1)).timestamp())

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

Keluaran hasil (disingkat).

				
					{
  "nama": "Memphis Seoul",
  "address": "569 Lincoln Pl, Brooklyn, NY 11238, \\u0421\\u043f\\u043e\\u043b\\u0443\\u0447\\\u0435\\u043d\\u0456 \\u0428\\\u0442\\\u0442\\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": "Makanan fusion kenyamanan lokal yang sangat baik! \\nKimchi coleslaw !!! Ide yang luar biasa!",
      "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": "Sayap yang enak dengan beberapa jenis saus pedas. Ramen mac dan keju sangat enak.\\nUPDATE:\\nKembali lagi kemudian untuk mencoba slider meatloaf, irisan daging tebal dengan topping slaw dan saus yang fantastis - lezat. \\Anggap saja saya pelanggan tetap.\\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
    },
    ...
  ]
}
				
			
Kategori: Python

Vlad

Manajer Proyek Linkedin

0 Komentar

Tinggalkan Balasan

Tempat penampung avatar