scrpae google maps por selenium
Controle do navegador cromado com Selenium

Usando Selênio na raspagem de dados é uma coisa bastante comum. Ele automatiza os navegadores e permite simular atividades reais do usuário para evitar o bloqueio. É especialmente útil ao raspar sites gerados dinamicamente por JavaScript, como o Google. Além disso, ajuda a evitar qualquer tipo de proteção contra rastejamento, pois basicamente simula o comportamento de clientes reais.

Neste artigo, você verá um tutorial passo a passo para desenvolver um raspador que poderá analisar os lugares do Google Maps sem ficar bloqueado mesmo depois de mais de 1000 páginas.

O que precisamos para construir o Rastejador

  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.

Tutorial passo a passo para construir o extrator do Google Maps

Baixar e salvar o ChromeDriver

Para usar Selenium com o Google Chrome você precisará vincular o código python ao navegador, usando ChromeDriver.

Baixe a versão do ChromeDriver que combina com a versão de seu navegador e tipo de SO. O número da versão de seu navegador ChromeDriver pode ser encontrado aqui: Chrom -> Ícone do menu (canto superior direito) -> Ajuda -> Sobre o Google Chrome.

Arquivo de cromedriver desarquivado e guarde-o em algum lugar em seu sistema (caminho para ele usaremos mais tarde). Neste exemplo tutorial, armazenamos o arquivo na pasta do projeto.

Instalar pacotes de Selênio e Parsel

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
				
			

Inicializar e iniciar o Webdriver

Antes de inicializar o Webdriver, certifique-se de ter feito os passos 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 Chrome 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 do Google Maps

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/search/bars+near+NY,+USA/@40.7443439,-74.0197995,13z'.
driver.get(url)
				
			

Conteúdo da busca em mapas parciais

Assim que sua página for aberta, você verá a página na janela do seu navegador que é controlada pelo seu código python. Você pode executar o seguinte código para obter o conteúdo da página HTML do ChromeDriver.

				
					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.

google maps análise HTML
Encontrar xpath para elementos 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 listings e obtenha os dados de cada lugar.

				
					resultados = []

para el em resposta.xpath('//div[contains(@aria-label, "Resultados para")]/div/div[./a]'):
    resultados.append({
        'link': el.xpath('./a/@href').extract_first(''),
        título': el.xpath('./a/@aria-label').extract_first('')
    })
    
print(resultados)
				
			

Saída de lugares do Google Maps (abreviado).

				
					[
  {
    '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',
    título': "Black Iron Burger" (Hambúrguer de ferro preto)
  },
  {
    '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',
    título': 'Fools Gold NYC': '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',
    título': 11o. Bar
  },
  ...
...]
				
			

Pare o motorista quando o processo de extração estiver finalizado

É 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. Feche o motorista executando o seguinte código.

				
					driver.quit()
				
			

Conclusão e Recomendações sobre o Raspador e o Raspador mais Robusto

Apesar da complicada estrutura HTML do Google Maps, com Selenium e um bom conhecimento dos seletores XPath e CSS, você pode alcançar resultados bastante bons na raspagem. 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.

Correndo em paralelo

É 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 melhor maneira de raspar o Google Maps em escala de empresa

Como a raspagem do Google pode ser um grande desafio, muitas empresas e grandes empresas querem começar a raspar milhões de páginas sem gastar tempo para desenvolver e manter seus próprios rastejadores.

A maneira mais fácil de começar a raspar o Google Maps é usando Plataforma Outscraper (para obter resultados em arquivos CSV), APIou SDKs (para integrar em código).

A maneira mais fácil de começar a usar o Google Maps Scraping

Instale o SDK do Outscraper executando o seguinte comando.

				
					pip install google-services-api
				
			

Inicializar o cliente e pesquisar por listagens no Google ou analisar listas específicas, enviando identificações de locais.

* você pode obter o token API (SECRET_API_KEY) no Página de perfil.

				
					de outscraper importação ApiClient

api_client = ApiClient(api_key='SECRET_API_KEY')

# Busca de negócios em locais específicos:
resultado = api_client.google_maps_search('restaurants brooklyn usa', limit=20, language='en')

# Obter dados do local específico por id
resultado = api_client.google_maps_search('ChIJrc9T9fpYwokRdvjYRHT8nI4', idioma='pt')

# Busca com muitas consultas (em lote)
resultado = api_client.google_maps_search([
    restaurantes no brooklyn eua",
    bares do brooklyn eua",
], língua='pt')

print(result)
				
			

Saída de resultados (abreviada).

				
					[
  [
    {
      "nome": "Colonie",
      "full_address": "127 Atlantic Ave, Brooklyn, NY 11201",
      "bairro": "Brooklyn Heights",
      "rua": "127 Atlantic Ave",
      "cidade": "Brooklyn",
      "postal_code": "11201",
      "country_code": "US",
      "país": "Estados Unidos da América",
      "us_state": "New York",
      "Estado": "New York",
      "plus_code": nulo,
      "latitude": 40.6908464,
      "longitude": -73.9958422,
      "time_zone": "América/Nova_Terra",
      "popular_times": nulo,
      "site": "http://www.colonienyc.com/",
      "telefone": "+1 718-855-7500",
      "tipo": "restaurante americano",
      "categoria": "restaurantes",
      "subtipos": "Restaurante americano, Cocktail bar, Restaurante italiano, Restaurante orgânico, Restaurante, Wine bar",
      "cargos": nulo,
      "classificação": 4.6,
      "avaliações": 666,
      "reviews_data": nulo,
      "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",
      "foto": "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": "segunda-feira": 5\u20139:30PM | terça-feira: Fechado | Quarta-feira: Fechado | Quinta-feira: 5\u20139:30PM | Sexta-feira: 5\u20139:30PM Sábado: 11h20133min,5h20139:30min Domingo: 11h20133min,5h20139:30min",
      "horas_de_trabalho": {
        "Segunda-feira": "5\u20139:30PM",
        "Terça-feira": "Fechado",
        "Quarta-feira": "Fechado",
        "Quinta-feira": "5\u20139:30PM",
        "Sexta-feira": "5\u20139:30PM",
        "Sábado": "11AM\\u20133PM,5\\u20139:30PM",
        "Domingo": "11AM\\u20133PM,5\\u20139:30PM"
      },
      "business_status": "OPERACIONAL",
      },
      "reserving_table_link": "https://resy.com/cities/ny/colonie",
      "booking_appointment_link": "https://resy.com/cities/ny/colonie",
      "owner_id": "114275131377272904229",
      "verificado": é verdade,
      "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: A maneira mais fácil de começar a usar o Google Reviews Scraping

Você pode extrair revisões executando o seguinte código (assumindo que você tenha instalado o pacote python e iniciado o cliente).

				
					# Obtenha revisões do local específico por id
resultado = api_client.google_maps_reviews('ChIJrc9T9fpYwokRdvjYRHT8nI4', reviewsLimit=20, language='en')

# Obter resenhas de lugares encontrados por consulta de busca
resultado = api_client.google_maps_reviews('Memphis Seoul brooklyn usa', reviewsLimit=20, limit=500, language='en')

# Receba apenas novas revisões durante as últimas 24 horas
a partir da data/hora de importação, timedelta
yesterday_timestamp = int((datetime.now() - timedelta(1)).timestamp())

resultado = api_client.google_maps_reviews(
    'ChIJrc9T9fpYwokRdvjYRHT8nI4', sort='newestestamp', cutoff=yesterday_timestamp, reviewsLimit=100, language='en')
				
			

Saída de resultados (abreviada).

				
					{{
  "nome": "Memphis Seoul",
  "endereço": "569 Lincoln Pl, Brooklyn, NY 11238, \u0421u043f\u043e043b\u0443b\u0447u0435u043d\u0456 \u0428u0442u0430u0442u0438",
  "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_nome": "Eliott Levy",
      "autor_id": "112314095435657473333",
      "review_text": "Muito bom conforto local comida de fusão! \\nKimchi coleslaw !! Que idéia incrível!",
      "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": nulo
    },
    {
      "google_id": "0x89c25bb5950fc305:0x330a88bf1482581d",
      "autor_link": "https://www.google.com/maps/contrib/106144075337788507031?hl=en-US",
      "autor_nome": "fenwar1",
      "autor_id": "106144075337788507031",
      "review_text": "Grandes asas com vários tipos de molho picante". O macarrão e o ramen de queijo é excelente.{\i1}nUPDATE:{\i}Retornado mais tarde para provar o deslizador de bolo de carne, uma fatia grossa de carne recheada com bofetada e um molho fantástico - delicioso. \\Considerem-me um regular.ud83ddd4d",
      "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": nulo
    },
    ...
  ]
}
				
			
Categorias: Pyhton

Vlad

Gerente de projetos Linkedin

Comentários de 0

Deixe um comentário

Espaço reservado para avatar