L'extraction de données de Google Maps à l'aide de Python permet de collecter des informations précieuses sur les lieux, les entreprises et les services, ce qui est utile pour l'analyse du marché, l'identification de nouveaux emplacements optimaux, la mise à jour des répertoires actuels, l'analyse de la concurrence et l'évaluation de la popularité des lieux. Ce guide explique en détail comment extraire des informations de Google Maps à l'aide des bibliothèques Python requests et lxml. Il comprend des instructions détaillées sur la formulation des requêtes, le traitement des réponses, l'analyse des données structurées et l'exportation vers un fichier CSV.
Assurez-vous que les bibliothèques Python suivantes sont installées:
Installez ces bibliothèques à l'aide de pip si nécessaire:
pip install requests
pip install lxml
Nous vous présentons ci-dessous un processus de scraping étape par étape, avec des exemples à l'appui.
Dans les sections suivantes, nous allons présenter un processus détaillé, étape par étape, pour le scraping de données à partir de Google Maps, complété par des exemples visuels pour vous guider à travers chaque étape.
Spécifiez l'URL à partir de laquelle vous souhaitez extraire des données.
url = "https link"
La mise en place d'en-têtes appropriés est cruciale pour imiter les activités d'un utilisateur authentique, ce qui réduit considérablement les risques que le scraper soit signalé comme un bot. En outre, l'intégration de serveurs proxy permet de maintenir des activités de scraping continues en contournant les blocages qui pourraient résulter du dépassement des limites de requête associées à une seule adresse 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",
}
Envoyez une requête à l'URL de Google Maps et récupérez le contenu de la page:
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}")
Utilisez lxml pour analyser le contenu HTML:
from lxml import html
parser = html.fromstring(page_content)
Il est essentiel de comprendre la structure du document HTML pour extraire correctement les données. Vous devez identifier les expressions XPath pour les points de données que vous souhaitez extraire. Voici comment procéder:
Nom du restaurant:
//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()
Options:
= ', '.join(result.xpath('.//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
Latitude géographique:
//div[@jscontroller="AtSb"]/div/@data-lat
Géo Longitude:
//div[@jscontroller="AtSb"]/div/@data-lng
Extraire les données à l'aide des XPaths identifiés:
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]
# Ajouter à la liste des données
data.append({
"restaurant_name": restaurant_name,
"address": address,
"options": options,
"geo_latitude": geo_latitude,
"geo_longitude": geo_longitude
})
Enregistrer les données extraites dans un fichier 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)
Voici le code complet pour récupérer les données de Google Maps:
import requests
from lxml import html
import csv
# Définir l'URL cible et les en-têtes
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",
}
# Récupérer le contenu de la page
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()
# Analyse du contenu HTML
parser = html.fromstring(page_content)
# Extraire des données à l'aide de 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]
# Ajouter à la liste des données
data.append({
"restaurant_name": restaurant_name,
"address": address,
"options": options,
"geo_latitude": geo_latitude,
"geo_longitude": geo_longitude
})
# Enregistrer les données au format 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.")
Pour un web scraping efficace, il est essentiel d'utiliser les bons en-têtes de requête et les bons proxys. Les meilleurs choix de proxy sont les proxys des centres de données ou des FAI, qui offrent des vitesses élevées et une faible latence. Cependant, comme il s'agit de proxys statiques, il est nécessaire de mettre en œuvre une rotation d'IP pour empêcher le blocage de manière efficace. Une autre option, plus conviviale, consiste à utiliser des proxys résidentiels. Ces proxys dynamiques simplifient le processus de rotation et ont un facteur de confiance plus élevé, ce qui les rend plus efficaces pour contourner les blocages.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0