Selenium Web Scraping - Tudo o que você precisa saber em 2024

Guias, Proxies, Python, Scraping, maio-05-20225 minutos de leitura

A recolha de dados é um termo que tem sido muito utilizado na última década. Todas as empresas querem conhecer os seus clientes na íntegra para que a organização possa desenvolver a melhor estratégia para resolver os problemas das pessoas. Normalmente, as organizações de base tecnológica têm lagos de dados para obter dados para análise. Mas, por vezes, têm de recolher os dados online para

A recolha de dados é um termo que tem sido muito utilizado na última década. Todas as empresas querem conhecer os seus clientes na íntegra para que a organização possa desenvolver a melhor estratégia para resolver os problemas das pessoas. Normalmente, as organizações de base tecnológica têm lagos de dados para obter dados para análise. Mas, por vezes, têm de recolher os dados online para várias análises, como a análise de sentimentos, a análise de SEO e a monitorização. O Web scraping é a abordagem para extrair dados de uma fonte específica e guardá-los no armazenamento local ou na nuvem. Python é a melhor linguagem de programação para efetuar a recolha de dados da Web. Existem muitas bibliotecas em Python que podem ajudá-lo a extrair dados de sítios Web, blogues e outras fontes online. As mais famosas são BeautifulSoup e Selenium. Neste artigo, veremos como realizar o selenium web scraping.

O que é Web Scraping?

A recolha de dados da Web consiste em extrair uma grande quantidade de dados de várias páginas Web em linha. Hoje em dia, os principiantes em aprendizagem automática e IA investem muito tempo a aprender diferentes formas de raspar a Web. A recolha de dados da Web é composta por duas partes, nomeadamente o crawler e o scraper. O crawler é responsável por encontrar e localizar os dados necessários a partir da fonte de destino e, em seguida, o scraper ajuda a extrair esses dados da fonte.

Selénio - O que é?

Selenium é uma biblioteca python gratuita e de código aberto que é uma estrutura de teste automatizada usada principalmente para testar e validar aplicações web em vários navegadores. Pode utilizar qualquer linguagem de programação, como C#, Java e a minha preferida, Python. O software Selenium é um conjunto de ferramentas que consiste em:

  • Ambiente de desenvolvimento integrado (IDE) Selenium.
  • Controlo remoto Selenium.
  • Webdriver.
  • Grelha de selénio.

Vamos ver como usar o Selenium com Python para automatizar todo o processo de raspagem da web.

Declaração do problema:

O nosso objetivo é recolher os nomes e os salários dos jogadores da NBA da última década e, em seguida, guardar os dados no formato de quadro de dados. NOTA: Para aprender e explicar como funciona o Selenium web scraping, utilizamos o sítio Web hoopshype.

Instalar o Chrome Driver:

Antes de iniciar o processo de recolha de dados da Web, é necessário instalar o controlador do Chrome no seu computador. O controlador do Chrome a instalar baseia-se na versão do navegador Chrome que está a utilizar. Pode verificá-lo seguindo estes passos:

PASSO 1: Abra o navegador Chrome-> Clique no ícone "Hamburger", que está presente no canto superior direito do navegador.

PASSO 2: Depois de clicar no ícone "Hambúrguer", verá a opção "Ajuda". Clique em "Ajuda" e seleccione "sobre o navegador Chrome". Depois de fazer isso, você obterá a página da versão. A imagem abaixo representa a página da versão do Google Chrome.

Janela da versão do Google Chrome

Nota: Se tiver alguma atualização, é melhor instalar essas actualizações antes de instalar o controlador do Chrome.

Depois de descobrir a versão, vá ao sítio Web do controlador do Chrome e transfira o controlador com base na versão do Chrome que possui.

Instalar o Selenium:

A maneira mais fácil de instalar o pacote selenium é através do PIP (Package Installer Python). Você pode abrir qualquer notebook, seja o Juypter ou o Google Collab, e digitar o seguinte código python:

pip install selenium

O comando acima descarrega todos os pacotes de dependência para o Selenium. Agora, vamos ver como implementar o web scraping com o Selenium.

Web Scraping com Selenium:

Recomendamos a criação de um ambiente virtual e a implementação do processo de recolha de dados da Web para uma melhor prática. Neste exemplo, vamos utilizar o bloco de notas Juypter para efetuar a recolha de dados da Web.

PASSO 1: Importar todas as bibliotecas necessárias. O Pandas e o Selenium webdriver são as principais bibliotecas para o web scraping simples. O código python para importar todas as bibliotecas necessárias é mostrado abaixo:

from selenium import webdriver
from selenium.webdriver.common.keys import keys
import pandas as pd

PASSO 2: Depois de importar as bibliotecas, o passo seguinte é iniciar o controlador do Chrome. O código python é mostrado abaixo para iniciar o driver

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

NOTA: No argumento, mencione o caminho completo da localização do controlador do Chrome no seu sistema local.

PASSO 3: Depois de iniciar o controlador, o navegador Chrome deve abrir-se numa nova janela. Mas a janela deve estar vazia, uma vez que não existe um URL de feed. O código python para o URL do feed de destino é apresentado abaixo:

seed_url = 'https://hoopshype.com/salaries/players/'
driver.get(seed_url)

PASSO 4: Uma vez introduzido o URL do feed, na nova janela, deve ser possível ver o sítio Web de destino. O processo seguinte consiste em encontrar o nome de todos os jogadores da NBA. No Selenium, pode encontrar os elementos HTML através dos seguintes métodos:

  • ID
  • Seletor CSS
  • Seletor XPATH
  • Nome
  • Nome da classe
  • Nome da etiqueta

No nosso exemplo, vamos ver como detetar os elementos utilizando o seletor XPATH. Queremos extrair dois pormenores destes dados:

  • Nome do jogador
  • Salário

Nota: Também é possível utilizar o formulário de pesquisa para encontrar elementos Web. O formulário de pesquisa está localizado na parte inferior da página Inspeção.

PASSO 5: Quando chegar à página de destino, deverá ver uma lista de jogadores e dos respectivos salários para as épocas (ano). Seleccione qualquer um dos nomes dos jogadores e clique com o botão direito do rato. Irá obter várias opções. Nessas opções, clique em "Inspecionar". A imagem abaixo representa a página Inspecionar.

Inspecionar página do SIte de destino

Como já foi referido, o objetivo é extrair os nomes dos jogadores. Assim, o primeiro passo é encontrar um elemento de um só jogador e o fator comum entre todos os elementos dos jogadores. Assim, no mesmo processo, clique com o botão direito do rato no nome do jogador e inspeccione-o. Isto deve levá-lo diretamente para a localização do seu elemento. Em vez de pegar no nome de um jogador no nosso cenário, estamos a pegar nos nomes de todos os jogadores. O elemento comum a todos os jogadores é "td class-'name'". Assim, se utilizarmos este elemento e o repetirmos, obteremos o nome de todos os jogadores. O código Python para extrair o nome de um jogador é apresentado em seguida:

nba_players = driver.find_elements_by_xpath('//td[@class="name"]')
lista_de_jogadores = []
for p in range(len(nba_players)):
    lista_de_jogadores.append(nba_jogadores[p].texto)
imprimir(lista_de_jogadores)

Explicação: Como mencionado acima, estamos a encontrar o elemento de código HTML utilizando a abordagem XPATH. Obviamente, precisamos do caminho XPATH de vários elementos. A maneira mais fácil é encontrar o elemento name, que é "td class-name". Clique com o botão direito do rato no elemento e seleccione "Copiar". Deverá obter muitas opções, tais como copiar caminho JS e copiar XPATH. Selecione copiar XPATH e você deverá obter automaticamente a localização XPATH do elemento. Cole o caminho no argumento find_elements_by_XPATH. Assim que colares o caminho, o Python deve começar a identificar estes elementos e a obter os seus endereços, não o nome real. Para obter os nomes reais dos jogadores, vamos fazer um loop na função e anexar os resultados a uma lista vazia como saída. Depois de executares o excerto de código acima, deves obter o resultado como mostrado na imagem abaixo.

Saída para extrair o nome dos jogadores

Agora que já temos os nomes dos jogadores, o passo seguinte é obter os respectivos salários. O processo exato de extração do nome é realizado para obter os detalhes do salário.

PASSO 6: Os dados relativos ao salário são extraídos utilizando o código python, como se mostra a seguir:

players_salary=driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]')
lista_de_salarios=[]
for s in range(len(players_salary)):
    lista_salario.append(salário_dos_jogadores[s].texto)
print(lista_salário)

Explicação: O processo é o mesmo. A única diferença é o elemento comum entre os jogadores. O elemento web "td class-'hh-salaries-sorted'" é o elemento comum. Depois de encontrar o elemento, criamos uma lista vazia para repetir toda a função e anexar os detalhes do salário à lista vazia. O resultado deve ser parecido com a imagem abaixo:

Saída para extrair o salário dos jogadores

PASSO 7: Agora, extraímos os dados do nosso alvo. Mas, se olharmos com atenção, os dados são apenas de uma estação (ano atual). A nossa declaração de problema diz para extrair os dados da última década. É aqui que a automação do navegador entra em cena. Não precisa de se preocupar. Podemos usar o mesmo código para a estação como a função de loop. O código python para automatizar o processo de raspagem e obter os dados da última década é mostrado abaixo:

for i in range(2010,2021):
    número_da_página = str(i) + '-' + str(i+1) +'/'
    feed_url = 'https://hoopshype.com/salaries/players/' + page_number
    driver.get(feed_url)
    
    jogadores = driver.find_elements_by_xpath('//td[@class="name"]')
    salários = driver.find_elements_by_xpath('//td[@class="hh-salários-ordenados"]') 
    
    jogador = []
   for j in range(len(players)):
        player.append(players[j].text)
    
    salário = []
   for k in range(len(salaries)):
        salário.append(salários[k].texto)

Explicação: Como já foi referido, o nosso objetivo é obter os dados dos últimos dez anos. Para o fazer, temos de implementar a paginação. A paginação é o processo de adicionar números consecutivos, normalmente números de página, para identificar a sequência de ordem da página. As estações do ano são representadas no formato AAAA/MM. Para o reconhecer, estamos a utilizar a técnica de concatenação. Depois disso, utilizamos o mesmo processo e o mesmo código dentro do ciclo.

PASSO 8: O último passo é guardar os dados na estrutura de dados para várias análises, como a análise de sentimentos e a análise da concorrência. O código python para guardar os dados na estrutura de dados é apresentado a seguir:

df = pd.DataFrame(columns=['Player','Salary','Year'])
dados = lista(zip(jogador[1:],salário[1:])) 
df1 = pd.DataFrame(dados, colunas=['Jogador','Salário']) 
df1['Ano'] = i
df = df.append(df1)

NOTA: Na segunda linha do código, pode ver que efectuei o fatiamento. A razão para isso é que, quando se vê a saída para os nomes e salários dos jogadores, o primeiro índice, ou seja, o índice 0, foi o "JOGADOR" e a "DATA". Estes itens não têm grande importância para a tabela. Por isso, podemos eliminar esses itens.

Explicação: Criámos um quadro vazio com "Player", "Salary" e "Year" como colunas. Acumulamos todos os dados numa única lista com a função Zip para anexar a lista ao quadro de dados. Uma vez que os dados são adicionados ao quadro de dados, é hora de terminar a automação e fechar o driver. Pode guardar o quadro de dados num ficheiro CSV para um repositório de dados, se necessário.

É isso mesmo! Conseguiu fazer automação e web scraping com sucesso usando Selenium e Python.

Perguntas frequentes:

1. O Selenium é adequado para a recolha de dados da Web?
Sim, se estiver a planear recolher páginas Web dinâmicas, que utilizam JavaScript. Mas também é uma boa opção para Python. Selenium é um bom ponto de partida para iniciantes interessados em web scraping.
2. Qual é o melhor, BeautifulSoup ou Selenium?
Esta resposta baseia-se no tipo de página Web alvo e na escala do seu projeto. Se estiver à procura de raspar uma página estática pequena e bem estruturada, então o BeautifulSoup é melhor. Se o seu projeto envolve páginas Web dinâmicas estruturadas e complexas, o selenium web scraping pode ser a melhor opção.
3. Quais são as melhores ferramentas para a recolha de dados da Web?
Python é a melhor e mais favorável ferramenta para efetuar a recolha de dados da Web. As bibliotecas python, como BeautifulSoup, Selenium e Request, bem como outras ferramentas, como Scrapy, são as melhores ferramentas para o web scraping.

Conclusão:

Este artigo mostra como instalar um controlador do Chrome no seu sistema local para automatizar um pequeno processo de recolha de dados da Web. Em tempo real, o tratamento de uma grande quantidade de dados (em termos de tamanho, como MB, GB e, por vezes, TB) envolve etapas complexas. O Selenium é um bom começo para iniciantes interessados em coleta de dados, processo de raspagem de tela e ciência de dados em geral. Como mencionado, um processo complexo de raspagem da Web requer muito tempo para reunir os dados. A maioria dos sítios Web não permite a recolha de dados da Web durante um período prolongado; assim que atingir esse limite, o sítio Web irá provavelmente bloquear o seu endereço IP e parar o processo de recolha de dados da Web. Para evitar estas dificuldades, recomenda-se a utilização de um proxy. ProxyScrape O site da Web, o Google, fornece excelentes proxies residenciais que são mais adequados para tarefas de elevada exigência, como a recolha de dados da Web.

AVISO LEGAL: Este artigo destina-se estritamente a fins didácticos. Sem seguir as directrizes adequadas, a recolha de dados da Web pode ser ilegal. Este artigo não apoia a recolha ilícita de dados da Web de forma alguma.