Mengekstrak data dari Google Maps menggunakan Python memungkinkan pengumpulan informasi berharga tentang lokasi, bisnis, dan layanan, yang bermanfaat untuk analisis pasar, mengidentifikasi lokasi tempat baru yang optimal, memelihara direktori saat ini, analisis pesaing, dan mengukur popularitas tempat. Panduan ini memberikan panduan komprehensif tentang cara mengekstrak informasi dari Google Maps dengan menggunakan pustaka Python request dan lxml. Panduan ini mencakup instruksi terperinci tentang cara membuat permintaan, menangani respons, mengurai data terstruktur, dan mengekspornya ke file CSV.
Pastikan Anda telah menginstal pustaka Python berikut ini:
Instal pustaka-pustaka ini menggunakan pip jika diperlukan:
pip install requests
pip install lxml
Di bawah ini, kami akan menyajikan proses pengikisan langkah demi langkah, lengkap dengan contohnya.
Pada bagian berikut ini, kami akan memandu Anda melalui proses langkah demi langkah yang mendetail untuk mengikis data dari Google Maps, lengkap dengan contoh visual untuk memandu Anda melalui setiap tahap.
Tentukan URL dari mana Anda ingin mengikis data.
url = "https link"
Menyiapkan header yang tepat sangat penting untuk meniru aktivitas pengguna asli, secara signifikan mengurangi kemungkinan scraper ditandai sebagai bot. Selain itu, mengintegrasikan server proxy membantu mempertahankan aktivitas scraping yang berkelanjutan dengan menghindari pemblokiran apa pun yang mungkin timbul akibat melebihi batas permintaan yang terkait dengan satu alamat IP.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua-platform-version': '"6.5.0"',
'sec-ch-ua-wow64': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
proxies = {
"http": "http://username:password@your_proxy_ip:port",
"https": "https://username:password@your_proxy_ip:port",
}
Kirim permintaan ke URL Google Maps dan dapatkan konten halaman:
import requests
response = requests.get(url, headers=headers, proxies=proxies)
if response.status_code == 200:
page_content = response.content
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
Gunakan lxml untuk mengurai konten HTML:
from lxml import html
parser = html.fromstring(page_content)
Memahami struktur dokumen HTML sangat penting untuk mengekstrak data dengan benar. Anda perlu mengidentifikasi ekspresi XPath untuk titik data yang ingin Anda kikis. Berikut ini cara Anda melakukannya:
Nama Restoran:
//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()
Alamat:
//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[2]/text()
Pilihan:
= ', '.join(result.xpath('.//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
Geo Lintang:
//div[@jscontroller="AtSb"]/div/@data-lat
Geo Bujur:
//div[@jscontroller="AtSb"]/div/@data-lng
Ekstrak data menggunakan XPath yang telah diidentifikasi:
results = parser.xpath('//div[@jscontroller="AtSb"]')
data = []
for result in results:
restaurant_name = result.xpath('.//div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()')[0]
address = result.xpath('.//div/div/div/a/div/div/div[2]/text()')[0]
options = ', '.join(result.xpath('.//div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
geo_latitude = result.xpath('.//div/@data-lat')[0]
geo_longitude = result.xpath('.//div/@data-lng')[0]
# Tambahkan ke daftar data
data.append({
"restaurant_name": restaurant_name,
"address": address,
"options": options,
"geo_latitude": geo_latitude,
"geo_longitude": geo_longitude
})
Simpan data yang diekstrak ke file CSV:
import csv
with open("google_maps_data.csv", "w", newline='', encoding='utf-8') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=["restaurant_name", "address", "options", "geo_latitude", "geo_longitude"])
writer.writeheader()
for entry in data:
writer.writerow(entry)
Berikut ini adalah kode lengkap untuk mengikis data Google Maps:
import requests
from lxml import html
import csv
# Tentukan URL dan header target
url = "https://www.google.com/search?sca_esv=04f11db33f1535fb&sca_upv=1&tbs=lf:1,lf_ui:4&tbm=lcl&sxsrf=ADLYWIIFVlh6WQCV6I2gi1yj8ZyvZgLiRA:1722843868819&q=google+map+restaurants+near+me&rflfq=1&num=10&sa=X&ved=2ahUKEwjSs7fGrd2HAxWh1DgGHbLODasQjGp6BAgsEAE&biw=1920&bih=919&dpr=1"
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua-platform-version': '"6.5.0"',
'sec-ch-ua-wow64': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}
proxies = {
"http": "http://username:password@your_proxy_ip:port",
"https": "https://username:password@your_proxy_ip:port",
}
# Mengambil konten halaman
response = requests.get(url, headers=headers, proxies=proxies)
if response.status_code == 200:
page_content = response.content
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
exit()
# Mengurai konten HTML
parser = html.fromstring(page_content)
# Mengekstrak data menggunakan XPath
results = parser.xpath('//div[@jscontroller="AtSb"]')
data = []
for result in results:
restaurant_name = result.xpath('.//div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()')[0]
address = result.xpath('.//div/div/div/a/div/div/div[2]/text()')[0]
options = ', '.join(result.xpath('.//div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
geo_latitude = result.xpath('.//div/@data-lat')[0]
geo_longitude = result.xpath('.//div/@data-lng')[0]
# Tambahkan ke daftar data
data.append({
"restaurant_name": restaurant_name,
"address": address,
"options": options,
"geo_latitude": geo_latitude,
"geo_longitude": geo_longitude
})
# Menyimpan data ke CSV
with open("google_maps_data.csv", "w", newline='', encoding='utf-8') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=["restaurant_name", "address", "options", "geo_latitude", "geo_longitude"])
writer.writeheader()
for entry in data:
writer.writerow(entry)
print("Data has been successfully scraped and saved to google_maps_data.csv.")
Untuk scraping web yang efektif, sangat penting untuk menggunakan header permintaan dan proxy yang tepat. Pilihan proxy yang optimal adalah proxy pusat data atau ISP, yang menawarkan kecepatan tinggi dan latensi rendah. Namun, karena ini adalah proxy statis, menerapkan rotasi IP diperlukan untuk mencegah pemblokiran secara efektif. Pilihan alternatif dan lebih mudah digunakan adalah menggunakan proxy perumahan. Proksi dinamis ini menyederhanakan proses rotasi dan memiliki faktor kepercayaan yang lebih tinggi, sehingga lebih efektif dalam menghindari pemblokiran.
Komentar: 0