Índice

Como você já deve saber, o API oficial do Google Places é limitado a apenas 5 avaliações por local. Portanto, os desenvolvedores estão estudando a raspagem para poder obter todas as avaliações de qualquer empresa no Google Maps.

Fazer o scraping do Google com todas as suas proteções e renderizar páginas dinamicamente pode ser uma tarefa desafiadora. Felizmente, há muitas ferramentas que você pode usar para extrair avaliações em python ou em qualquer outra linguagem de programação. Nesta postagem do blog, você verá as duas ferramentas mais comuns para extrair as avaliações do Google: emulação de navegador e Outscraper Platform. Cada uma delas é suficiente para obter todas as avaliações de qualquer listagem do Google Maps.

Raspando o Google Reviews em Python usando o navegador para renderizar conteúdo dinâmico

Vamos usar Selênio para controlar o navegador Chrome. O navegador renderizará as páginas dinâmicas do Google Reviews. Para começar a criar o coletor de avaliações com o Selenium, precisaremos do seguinte:

  1. Python 3+.
  2. Navegador cromado instalado.
  3. Selênio 3.141.0+ (pacote python).
  4. Driver cromado (para seu sistema operacional).
  5. Parsel ou qualquer outra biblioteca para extrair dados de HTML, como a Beautiful Soup.

Instalar Selênio e Outros Pacotes

Instale os pacotes Selenium e Parsel executando os seguintes comandos. Usaremos a Parsel mais tarde quando analisarmos o conteúdo a partir do HTML.

				
					pip install selenium
pip install parsel # to extract data from HTML using XPath or CSS selectors
				
			

Iniciar o navegador

Antes de iniciar o driver, certifique-se de ter realizado as etapas anteriores e de ter o caminho para o arquivo chromedriver. Inicialize o driver com o seguinte código. Você deverá ver a nova janela do navegador aberta.

				
					from selenium import webdriver


chromedrive_path = './chromedriver' # use the path to the driver you downloaded from previous steps
driver = webdriver.Chrome(chromedrive_path)
				
			

Você pode ver o seguinte no mac: "O chromedriver não pode ser aberto porque o desenvolvedor não pode ser verificado." Para superar isso, clique com a tecla Control pressionada no chromedriver no Finder, escolha Abrir no menu e clique em Abrir na caixa de diálogo exibida. Você deverá ver "ChromeDriver was started successfully" (O ChromeDriver foi iniciado com sucesso) nas janelas de terminal abertas. Feche-a e, depois disso, você poderá iniciar o ChromeDriver a partir do seu código.

Download da página de todas as análises

Depois de iniciar o driver, você estará pronto para abrir algumas páginas. Para abrir qualquer página, use o comando "get".

				
					url = 'https://www.google.com/maps/place/Central+Park+Zoo/@40.7712318,-73.9674707,15z/data=!3m1!5s0x89c259a1e735d943:0xb63f84c661f84258!4m16!1m8!3m7!1s0x89c258faf553cfad:0x8e9cfc7444d8f876!2sTrump+Tower!8m2!3d40.7624284!4d-73.973794!9m1!1b1!3m6!1s0x89c258f1fcd66869:0x65d72e84d91a3f14!8m2!3d40.767778!4d-73.9718335!9m1!1b1?hl=en&hl=en'
driver.get(url)
				
			

Revisões parciais

Quando a página for aberta, você verá a página na janela do Chrome que é controlada pelo seu código. Você pode executar o código a seguir para obter o conteúdo da página HTML do driver.

				
					page_content = driver.page_source
				
			

Para ver confortavelmente o conteúdo HTML, abra o console do desenvolvedor no Chrome, abrindo o menu do Chrome no canto superior direito da janela do navegador e selecionando Mais ferramentas > Ferramentas do desenvolvedor. Agora você deve conseguir ver os elementos de sua página.

resenhas do google em python
Como encontrar o caminho X para as avaliações que queremos obter com o Developer Console

Você pode analisar o conteúdo da página HTML usando suas ferramentas de análise favoritas. Nós usaremos Parsel neste tutorial.

				
					from parsel import Selector

response = Selector(page_content)
				
			

Iterate over the reviews.

				
					results = []

for el in response.xpath('//div/div[@data-review-id]/div[contains(@class, "content")]'):
    results.append({
        'title': el.xpath('.//div[contains(@class, "title")]/span/text()').extract_first(''),
        'rating': el.xpath('.//span[contains(@aria-label, "stars")]/@aria-label').extract_first('').replace('stars' ,'').strip(),
        'body': el.xpath('.//span[contains(@class, "text")]/text()').extract_first(''),
    })
    
print(results)
				
			

Resultado do Google Reviews Crawler (abreviado).

				
					[
  {
    'title': 'Wanda Garrett',
    'rating': '5',
    'body': 'Beautiful ✨ park with a family-friendly atmosphere! I had a great time here; seeing all of the animals and learning all of the interesting facts was a fantastic way to spend the day. The zoo is beautifully landscaped and surrounded by …'
  },
  {
    'title': 'Bernadette Bennett',
    'rating': '4',
    'body': 'Worth going for the seals! They are the main attraction and located in the center of the zoo. We watched a live feeding and it was great. The kids loved it. The zoo is well manicured surrounded by gorgeous gardens. Lots of benches to rest …'
  },
  {
    'title': 'Mary Cutrufelli',
    'rating': '3',
    'body': "So not gonna lie... We came from PA. My kid expected to see lions and hippos and zebra from Madagascar. None of that which is there. It's clean it's a nice zoo. I wouldn't go again though."
  },
  ...
]
				
			

Parar o Navegador

É importante iniciar e parar o driver antes e depois da raspagem. É o mesmo que abrir e fechar o navegador antes e depois de navegar na Internet. Pare o navegador executando o seguinte código.

				
					driver.quit()
				
			

Apesar da estrutura HTML complicada do Google Reviews, com o Selenium e um bom conhecimento de seletores XPath e CSS, você pode obter resultados muito bons na raspagem. Esse método de usar um emulador de navegador deve evitar que você seja bloqueado. No entanto, se você dimensionar seu aplicativo, considere o uso de proxies para evitar problemas inesperados.

Multiprocessamento e outras recomendações

É possível executar drivers em multiprocessamento (não multithreading), mas cada driver consumirá uma CPU. Certifique-se de que você tenha um número suficiente delas.

A maneira mais fácil de raspar o Google Reviews em Python

A extração de dados do Google com navegadores tem seus prós e contras. Embora você possa desenvolver o rastreador por conta própria, durante o dimensionamento, isso pode levar a grandes despesas para usar servidores com grandes quantidades de CPUs para lidar com emulações de navegador. Além disso, deve haver uma pessoa que mantenha o rastreador e o atualize durante as alterações no site do Google.

Usando Plataforma OutscraperAPIou SDKs, O Outscraper oferece a solução mais fácil para empresas e indivíduos começarem a extrair avaliações do Google sem lidar com proxies, emulação de navegador e investimento em desenvolvimento.

Raspagem de revisões em Python usando o SDK

1. Você precisará do python3 + e este pacote python. Instalar o pacote executando o comando.

				
					pip install google-services-api
				
			

2. Obtenha sua chave de API do Página de perfil.

3. Importe o pacote e inicialize-o com a chave.

4. Especifique o local fornecendo um link, local de identificação ou nome.

				
					from outscraper import ApiClient


api_cliet = ApiClient(api_key='KEY_FROM_OUTSCRAPER')
response = api_cliet.google_maps_reviews(
    'https://www.google.com/maps/place/Do+or+Dive+Bar/@40.6867831,-73.9570104,17z/data=!3m2!4b1!5s0x89c25b96a0b10eb9:0xfe4f81ff249e280d!4m5!3m4!1s0x89c25b96a0b30001:0x643d0464b3138078!8m2!3d40.6867791!4d-73.9548217',
    language='en',
    limit=100
)
				
			

5. Aguarde alguns segundos até que as revisões sejam obtidas.

				
					[
    {
        "name": "Do or Dive Bar",
        "full_address": "1108 Bedford Ave, Brooklyn, NY 11216, United States",
        "borough": "Bedford-Stuyvesant",
        "street": "1108 Bedford Ave",
        "city": "Brooklyn",
        "postal_code": "11216",
        "country_code": "US",
        "country": "United States of America",
        "us_state": "New York",
        "state": "New York",
        "plus_code": null,
        "latitude": 40.686779099999995,
        "longitude": -73.9548217,
        "time_zone": "America/New_York",
        "site": "https://www.doordivebedstuy.com/",
        "phone": "+1 917-867-5309",
        "type": "Bar",
        "rating": 4.5,
        "reviews": 425,
        "reviews_data": [
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/115539085325450648866?hl=en-US",
                "autor_name": "Sam Grjaznovs",
                "autor_id": "115539085325450648866",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GgxmEH7a10v6Bo8AFb6OkbyxxfIBPXbMYVAxeSIRA=c0x00000000-cc-rp-ba3",
                "review_text": "Cozy shin dig with an assortment of drinks. They have a strong specialty for 10bucks and merch too. They have out side dining as well as back yard area. Ask for Brandon every other Saturday. He\u2019s hella cute!",
                "review_img_url": "https://lh5.googleusercontent.com/p/AF1QipPNs8QvvdkBonV5wuxdoylFjLY3k7L6muepbDq-",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s115539085325450648866!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1603781021,
                "review_datetime_utc": "10/27/2020 06:43:41",
                "review_likes": 0,
                "reviews_id": "7222934207919784056"
            },
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/110571545135018844510?hl=en-US",
                "autor_name": "Arabella Stephens",
                "autor_id": "110571545135018844510",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q=c0x00000000-cc-rp",
                "review_text": "Great atmosphere, always fun vibe and good beers. I live in the area and this is a very reliable standby. Would recommend to anyone who is not pretentious and likes a bit of clutter in their watering hole.",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s110571545135018844510!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1614111762,
                "review_datetime_utc": "02/23/2021 20:22:42",
                "review_likes": 0,
                "reviews_id": "7222934207919784056"
            },
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/101725757133547547783?hl=en-US",
                "autor_name": "Jack Parker",
                "autor_id": "101725757133547547783",
                "autor_image": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw=c0x00000000-cc-rp",
                "review_text": "All the bartenders are rad. Cheap drinks, and a nice backyard. They have space heaters, but I would still recommend bundling up if you plan on spending a while there. Jeopardy night is always fun too. Can\u2019t wait to sit inside again!",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw",
                "owner_answer": null,
                "owner_answer_timestamp": null,
                "owner_answer_timestamp_datetime_utc": null,
                "review_link": "https://www.google.com/maps/reviews/data=!4m5!14m4!1m3!1m2!1s101725757133547547783!2s0x0:0x643d0464b3138078?hl=en-US",
                "review_rating": 5,
                "review_timestamp": 1611947492,
                "review_datetime_utc": "01/29/2021 19:11:32",
                "review_likes": 0,
                "reviews_id": "7222934207919784056"
            },
            ...
        ]
]
				
			

Pacote Python ► https://pypi.org/project/google-services-api
API ► https://app.outscraper.com/api-docs

Tutorial em vídeo

Perguntas frequentes

Perguntas e respostas mais frequentes

Graças à API de avaliações do Google Maps do Outscraper, é possível coletar todas as avaliações do Google Maps. Os serviços de API do Outscraper permitem que você faça o scrape sem limites.

Existe um serviço de API para avaliações do Google Maps. Essa é a API de avaliações do Google Maps do Outscraper. Graças aos serviços do Outscraper, você pode exportar e baixar todas as avaliações do Google Maps.

As revisões podem ser extraídas com Python e Selenium. Isso é explicado em detalhes no artigo "Raspagem de todas as análises do Google em Python“.


Vlad

Gerente de projetos Linkedin