Das Scraping von Daten aus Google Maps mit Python ermöglicht die Sammlung wertvoller Informationen über Standorte, Unternehmen und Dienstleistungen, die für Marktanalysen, die Ermittlung optimaler neuer Veranstaltungsorte, die Pflege aktueller Verzeichnisse, die Analyse von Wettbewerbern und die Messung der Beliebtheit von Orten von Nutzen sind. Dieses Handbuch bietet eine umfassende Anleitung, wie man mit den Python-Bibliotheken requests und lxml Informationen aus Google Maps extrahiert. Er enthält detaillierte Anweisungen für die Erstellung von Anfragen, die Behandlung von Antworten, das Parsen strukturierter Daten und den Export in eine CSV-Datei.
Stellen Sie sicher, dass Sie die folgenden Python-Bibliotheken installiert haben:
Installieren Sie diese Bibliotheken bei Bedarf mit pip:
pip install requests
pip install lxml
Im Folgenden wird das Scraping Schritt für Schritt und anhand von Beispielen erläutert.
In den folgenden Abschnitten werden wir einen detaillierten Schritt-für-Schritt-Prozess für das Scraping von Daten aus Google Maps durchlaufen, komplett mit visuellen Beispielen, um Sie durch jede Phase zu führen.
Geben Sie die URL an, von der Sie Daten abrufen möchten.
url = "https link"
Die Einrichtung geeigneter Header ist entscheidend für die Nachahmung der Aktivitäten eines echten Benutzers, wodurch die Wahrscheinlichkeit, dass der Scraper als Bot eingestuft wird, erheblich verringert wird. Darüber hinaus hilft die Integration von Proxy-Servern dabei, kontinuierliche Scraping-Aktivitäten aufrechtzuerhalten, indem Sperren umgangen werden, die durch das Überschreiten der mit einer einzelnen IP-Adresse verbundenen Anfragelimits entstehen könnten.
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",
}
Senden Sie eine Anfrage an die Google Maps URL und rufen Sie den Seiteninhalt ab:
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}")
Verwenden Sie lxml, um den HTML-Inhalt zu parsen:
from lxml import html
parser = html.fromstring(page_content)
Das Verständnis der Struktur des HTML-Dokuments ist entscheidend für die korrekte Extraktion von Daten. Sie müssen die XPath-Ausdrücke für die Datenpunkte identifizieren, die Sie auslesen wollen. So können Sie dies tun:
Restaurant Name:
//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()
Adresse:
//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[2]/text()
Optionen:
= ', '.join(result.xpath('.//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
Geo-Breitengrad:
//div[@jscontroller="AtSb"]/div/@data-lat
Geo-Längengrad:
//div[@jscontroller="AtSb"]/div/@data-lng
Extrahieren Sie die Daten anhand der ermittelten XPaths:
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]
# An die Datenliste anhängen
data.append({
"restaurant_name": restaurant_name,
"address": address,
"options": options,
"geo_latitude": geo_latitude,
"geo_longitude": geo_longitude
})
Speichern Sie die extrahierten Daten in einer CSV-Datei:
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)
Hier ist der vollständige Code für das Scraping von Google Maps-Daten:
import requests
from lxml import html
import csv
# Definieren Sie die Ziel-URL und die Kopfzeilen
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",
}
# Abrufen des Seiteninhalts
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()
# Analysieren Sie den HTML-Inhalt
parser = html.fromstring(page_content)
# Daten mit XPath extrahieren
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]
# An die Datenliste anhängen
data.append({
"restaurant_name": restaurant_name,
"address": address,
"options": options,
"geo_latitude": geo_latitude,
"geo_longitude": geo_longitude
})
# Daten im CSV-Format speichern
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.")
Für effektives Web-Scraping ist es entscheidend, die richtigen Anfrage-Header und Proxys zu verwenden. Die optimale Wahl für Proxys sind Rechenzentrums- oder ISP-Proxys, die hohe Geschwindigkeiten und geringe Latenzzeiten bieten. Da es sich hierbei jedoch um statische Proxys handelt, muss eine IP-Rotation implementiert werden, um eine Blockierung wirksam zu verhindern. Eine alternative und benutzerfreundlichere Option ist die Verwendung von Proxys für Privatanwender. Diese dynamischen Proxys vereinfachen den Rotationsprozess und haben einen höheren Vertrauensfaktor, wodurch sie Sperren effektiver umgehen können.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bemerkungen: 0