Inhoudsopgave
Gebruik van Selenium Bij het scrapen van gegevens is dit een veelvoorkomende praktijk. Het automatiseert browsers en stelt je in staat om echte gebruikersactiviteiten te simuleren, zodat je niet wordt geblokkeerd. Dit is vooral handig bij het scrapen van websites die dynamisch met JavaScript worden gegenereerd, zoals Google. Bovendien helpt het om elke vorm van bescherming tegen crawling te omzeilen, aangezien het in feite het gedrag van echte clients simuleert.
In dit artikel vind je een stapsgewijze handleiding voor het ontwikkelen van een scraper die locaties uit Google Maps kan parseren zonder geblokkeerd te worden, zelfs niet na meer dan 1000 pagina’s.
Wat we nodig hebben om de crawler te bouwen
- Python 3+.
- De Chrome-browser is geïnstalleerd.
- Selenium 3.141.0+ (Python-pakket).
- Chrome-stuurprogramma (voor uw besturingssysteem).
- Parsel of een andere bibliotheek om gegevens uit HTML te halen, zoals Beautiful Soup.
Stapsgewijze handleiding voor het bouwen van de Google Maps Extractor
ChromeDriver downloaden en opslaan
Om Selenium met Google Chrome te gebruiken, moet je Python-code aan de browser koppelen door gebruik te maken van ChromeDriver.
Download de versie van ChromeDriver die overeenkomt met de versie van je browser en je besturingssysteem. Het versienummer van je Chrome-browser vind je hier: Chrome -> Menupictogram (rechtsboven) -> Help -> Over Google Chrome.
Pak het chromedriver-bestand uit en sla het ergens op je systeem op (het pad naar dit bestand gebruiken we later). In dit voorbeeld uit de tutorial slaan we het bestand op in de projectmap.
Installeer de pakketten Selenium en Parsel
Installeer de pakketten Selenium en Parsel door de volgende opdrachten uit te voeren. We zullen Parsel later gebruiken om HTML-inhoud te parseren.
pip install selenium
pip install parsel # to extract data from HTML using XPath or CSS selectors
WebDriver initialiseren en starten
Zorg ervoor dat je, voordat je WebDriver initialiseert, de voorgaande stappen hebt doorlopen en dat je het pad naar je ChromeDriver-bestand hebt. Initialiseer de driver met de volgende code. Er zou nu een nieuw Chrome-venster moeten openen.
from selenium import webdriver
chromedrive_path = './chromedriver' # use the path to the driver you downloaded from previous steps
driver = webdriver.Chrome(chromedrive_path)
Op een Mac krijg je mogelijk de volgende melding te zien: “ChromeDriver kan niet worden geopend omdat de ontwikkelaar niet kan worden geverifieerd”. Om dit op te lossen, klik je met de Control-toets ingedrukt op ChromeDriver in de Finder, kies je “Openen” in het menu en klik je vervolgens op ‘Openen’ in het dialoogvenster dat verschijnt. In de geopende terminalvensters zou je nu ‘ChromeDriver is succesvol gestart’ moeten zien. Sluit het venster en daarna kun je ChromeDriver vanuit je code starten.
Google Maps-pagina downloaden
Zodra je het stuurprogramma hebt gestart, kun je pagina’s gaan openen. Gebruik het commando “get” om een willekeurige pagina te openen.
url = 'https://www.google.com/maps/search/bars+near+NY,+USA/@40.7443439,-74.0197995,13z'
driver.get(url)
Kaarten analyseren, inhoud doorzoeken
Zodra je pagina is geopend, zie je in je browservenster de pagina die door je Python-code wordt aangestuurd. Je kunt de volgende code uitvoeren om de inhoud van de HTML-pagina via ChromeDriver op te halen.
page_content = driver.page_source
Om de HTML-inhoud gemakkelijk te kunnen bekijken, open je de ontwikkelaarsconsole in Chrome door het Chrome-menu in de rechterbovenhoek van het browservenster te openen en ‘Meer hulpmiddelen’ > ‘Ontwikkelaarstools’ te selecteren. Nu zou je de elementen van je pagina moeten kunnen zien.

Je kunt de inhoud van de HTML-pagina parseren met behulp van je favoriete parseertools. We gebruiken Parsel in deze handleiding.
from parsel import Selector
response = Selector(page_content)
Doorloop de vermeldingen en haal de gegevens van elke locatie op.
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)
Uitvoer van Google Maps-locaties (ingekort).
[
{
'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'
},
...
]
Stop het programma zodra het extractieproces is voltooid
Het is belangrijk om de driver voor en na het schrapen op de juiste manier te starten en te stoppen. Dit is hetzelfde als wanneer je je browser opent en sluit voor en na het surfen op internet. Sluit de driver door de volgende code uit te voeren.
driver.quit()
Conclusie en aanbevelingen voor het opschalen en het robuuster maken van de scraper
Ondanks de ingewikkelde HTML-structuur van Google Maps kun je met Selenium en een goede kennis van XPath en CSS-selectors behoorlijk goede resultaten behalen bij het scrapen. Deze methode, waarbij je een browseremulator gebruikt, zou je moeten beschermen tegen blokkering. Als je je applicatie echter op grotere schaal wilt gaan gebruiken, kun je overwegen om ook proxyservers in te zetten om onverwachte problemen te voorkomen.
Parallel draaien
Het is mogelijk om drivers in multiprocessing (niet in multithreading) uit te voeren, maar elke driver neemt één CPU in beslag. Zorg ervoor dat je er genoeg hebt.
De ultieme manier om Google Maps op bedrijfsniveau te scrapen
Aangezien het scrapen van Google een behoorlijke uitdaging kan zijn, willen veel bedrijven en grote ondernemingen miljoenen pagina’s gaan scrapen zonder tijd te hoeven besteden aan het ontwikkelen en onderhouden van hun eigen crawlers.
De eenvoudigste manier om aan de slag te gaan met het scrapen van Google Maps is door gebruik te maken van Outscraper Platform (om de resultaten in CSV-bestanden te krijgen), APIof SDK's (om in de code op te nemen).
De eenvoudigste manier om aan de slag te gaan met het scrapen van Google Maps
Installeer de SDK van Outscraper door de volgende opdracht uit te voeren.
pip install google-services-api
Initialiseer de client en zoek naar vermeldingen op Google, of haal specifieke vermeldingen op door plaats-ID’s te verzenden.
* je kunt een API-token (SECRET_API_KEY) ophalen via de profielpagina
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)
Weergave van de resultaten (ingekort).
[
[
{
"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"
...
},
...
]
]
Extra: De eenvoudigste manier om aan de slag te gaan met het scrapen van Google-recensies
Je kunt beoordelingen ophalen door de volgende code uit te voeren (ervan uitgaande dat je het Python-pakket hebt geïnstalleerd en de client hebt gestart).
# 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')
Weergave van de resultaten (ingekort).
{
"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
Meest voorkomende vragen en antwoorden
Dankzij de SDK van Outscraper is het mogelijk om Google Maps-gegevens te scrapen met Python Selenium. Bekijk de Outscraper Google Maps Places API-documentatie om te zien wat je allemaal kunt doen.
Met behulp van Python en Selenium is het mogelijk om het proces van het scrapen van gegevens uit Google Maps te automatiseren. Outscraper biedt een Google Maps Places API en SDK's die deze taak vereenvoudigen.
Het is mogelijk om het scrapen van Google Maps te automatiseren met behulp van Python en Selenium. Outscraper Google Maps Places API en met SDK's kun je dit op de eenvoudigste manier doen.
0 Comments