Tabela de Conteúdos

Como você já deve saber o API oficial do Google Places é limitado a 5 revisões por local apenas. Por isso, os desenvolvedores estão procurando raspar para ter a capacidade de buscar todas as resenhas de qualquer empresa no Google Maps.

Raspar o Google com todas as suas proteções e renderizar dinamicamente as páginas pode ser uma tarefa desafiadora. Felizmente, há muitas ferramentas que você pode usar para raspar revisões em python ou em qualquer outra linguagem de programação. Neste post do blog, você verá as duas ferramentas mais comuns de raspar revisões do Google: emulação de navegador e plataforma Outscraper. Cada uma delas é suficiente para obter todas as resenhas de qualquer listagem a partir de mapas.

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 irá renderizar as páginas dinâmicas do Google Reviews. Para começar a construir o raspador de resenhas com Selenium, vamos precisar:

  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 instalar parsel # para extrair dados de HTML usando XPath ou CSS selectors
				
			

Iniciar o Navegador

Antes de iniciar o motorista, certifique-se de ter feito as etapas anteriores e de ter o caminho para seu arquivo cromado. Inicialize o motorista através do seguinte código. Você deve ver a nova janela do navegador aberta.

				
					de selênio de importação


chromedrive_path = './chromedriver' # use o caminho para o motorista que você baixou das etapas anteriores
driver = webdriver.Chrome(chromedrive_path)
				
			

Em mac você pode ver o seguinte: "chromedriver não pode ser aberto porque o desenvolvedor não pode ser verificado". Para superar este controle-clique no seletor cromado no Finder, escolha Abrir no menu, e depois clique em Abrir no diálogo que aparece. Você deve ver "ChromeDriver foi iniciado com sucesso" nas janelas abertas do terminal. Feche-a e depois disso, você poderá iniciar o ChromeDriver a partir de seu código.

Download da página de todas as análises

Uma vez que você inicia o motorista, você está 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

Assim que sua página for aberta, você verá a página em sua janela cromada que é controlada por seu código. Você pode executar o seguinte código 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 Chrome no canto superior direito da janela do navegador e selecionando Mais Ferramentas > Ferramentas do Desenvolvedor. Agora você deve ser capaz de ver os elementos de sua página.

resenhas do google em python
Encontrar xpath para as revisões que queremos obter com o console do desenvolvedor

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

				
					de seletor de importação parsel

resposta = Selector(page_content)
				
			

Iterate over the reviews.

				
					resultados = []

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

Saída do Google Reviews Crwaler (abreviado).

				
					[
  {
    título': 'Wanda Garrett',
    'classificação': '5',
    corpo": Lindo parque ✨ com uma atmosfera familiar! Eu me diverti muito aqui; ver todos os animais e aprender todos os fatos interessantes foi uma maneira fantástica de passar o dia. O zoológico é belamente ajardinado e cercado por ...'.
  },
  {
    título': 'Bernadette Bennett',
    'classificação': '4',
    corpo": Vale a pena ir para os selos! Eles são a atração principal e estão localizados no centro do zoológico. Assistimos a uma alimentação ao vivo e foi ótimo. As crianças adoraram. O zoológico é bem cuidado, cercado por belos jardins. Muitos bancos para descansar...'.
  },
  {
    título': Mary Cutrufelli'',
    'classificação': '3',
    corpo": "Então não vai mentir... Nós viemos de PA. Meu filho esperava ver leões, hipopótamos e zebra de Madagascar. Nada do que está lá. Está limpo, é um belo zoológico. Mas eu não iria de novo".
  },
  ...
...]
				
			

Parar o Navegador

É importante começar e parar o motorista antes e depois da raspagem de acordo. É o mesmo que você abriria e fecharia seu navegador antes e depois de navegar na Internet. Pare o navegador executando o seguinte código.

				
					driver.quit()
				
			

Apesar da complicada estrutura HTML do Google Reviews, com Selenium e bons conhecimentos em seletores XPath e CSS você pode alcançar resultados bastante bons em scraping. Este método de usar um emulador de navegador deve protegê-lo de ser bloqueado. Entretanto, se você for escalar sua aplicação, você pode considerar o uso de proxies também, a fim de evitar alguns problemas inesperados.

Multiprocessamento e outras recomendações

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

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 raspador sozinho, durante o escalonamento, isso pode levar a grandes despesas para usar servidores com grandes quantidades de CPUs a fim de lidar com emulações de navegadores. Além disso, deve haver uma pessoa que mantenha o raspador e o atualize durante as mudanças no site do Google.

Usando Plataforma Outscraper, APIou SDKs O Outscraper fornece a solução mais fácil para empresas e indivíduos iniciarem Scraping Reviews do Google sem lidar com proxies, emulação do navegador e investir no 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.

				
					de outscraper importação ApiClient


api_cliet = ApiClient(api_key='KEY_FROM_OUTSCRAPER')
resposta = 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',
    limite=100
)
				
			

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

				
					[
    {
        "nome": "Do or Dive Bar",
        "full_address": "1108 Bedford Ave, Brooklyn, NY 11216, Estados Unidos",
        "bairro": "Bedford-Stuyvesant",
        "rua": "1108 Bedford Ave",
        "cidade": "Brooklyn",
        "postal_code": "11216",
        "country_code": "US",
        "país": "Estados Unidos da América",
        "us_state": "New York",
        "Estado": "New York",
        "plus_code": nulo,
        "latitude": 40.686779099999995,
        "longitude": -73.9548217,
        "time_zone": "América/Nova_Terra",
        "site": "https://www.doordivebedstuy.com/",
        "telefone": "+1 917-867-5309",
        "tipo": "Bar",
        "classificação": 4.5,
        "avaliações": 425,
        "reviews_data": [
            {
                "google_id": "0x89c25b96a0b30001:0x643d0464b3138078",
                "autor_link": "https://www.google.com/maps/contrib/115539085325450648866?hl=en-US",
                "autor_nome": "Sam Grjaznovs",
                "autor_id": "115539085325450648866",
                "autor_imagem": "https://lh3.googleusercontent.com/a-/AOh14GgxmEH7a10v6Bo8AFb6OkbyxxfIBPXbMYVAxeSIRA=c0x00000000-cc-rp-ba3",
                "review_text": "canela aconchegante" com um sortimento de bebidas. Eles têm uma forte especialidade para 10 dólares e também para comerciantes. Eles têm área de jantar ao ar livre, bem como área de quintal. Pergunte pelo Brandon todos os sábados. He\u2019s hella cute!",
                "review_img_url": "https://lh5.googleusercontent.com/p/AF1QipPNs8QvvdkBonV5wuxdoylFjLY3k7L6muepbDq-",
                "owner_answer": nulo,
                "owner_answer_timestamp": nulo,
                "owner_answer_timestamp_datetime_utc": nulo,
                "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_nome": "Arabella Stephens",
                "autor_id": "110571545135018844510",
                "autor_imagem": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q=c0x00000000-cc-rp",
                "review_text": "Ótimo ambiente, sempre vibração divertida e boas cervejas". Eu vivo na região e este é um standby muito confiável. Recomendaria a qualquer pessoa que não seja pretensiosa e goste de um pouco de desordem em seu bebedouro",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GisqDfheDO0Aq0cu1Z7YBTbzLyvSEvM3IMDKg3q",
                "owner_answer": nulo,
                "owner_answer_timestamp": nulo,
                "owner_answer_timestamp_datetime_utc": nulo,
                "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_nome": "Jack Parker",
                "autor_id": "101725757133547547783",
                "autor_imagem": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw=c0x00000000-cc-rp",
                "review_text": "Todos os barmen são radicais. Bebidas baratas, e um bom quintal. Eles têm aquecedores de espaço, mas eu ainda assim recomendaria o empacotamento se você planeja passar algum tempo lá. A noite de Jeopardy é sempre divertida também. Can\u2019t wait to sit inside again!",
                "review_img_url": "https://lh3.googleusercontent.com/a-/AOh14GjFK9CLb8__u5PtJzH1rGuX4DVgPvjaEeIkSJnCNw",
                "owner_answer": nulo,
                "owner_answer_timestamp": nulo,
                "owner_answer_timestamp_datetime_utc": nulo,
                "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"
            },
            ...
        ]
]
				
			

Tutorial em vídeo sobre como raspar as revisões do Google Maps em Python


Extra

Inscreva-se agora e usar o código de promoção OUTSCRAPER1 para obter um 10% DESLIGADO desconto.

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

Vlad

Gerente de projetos Linkedin