Como extrair um site JavaScript usando Python

Como fazer, Python, Raspagem, Nov-15-20225 minutos de leitura

Os navegadores Web utilizam o Javascript para criar uma experiência dinâmica e interactiva para o utilizador. A maior parte das aplicações e funções que tornam a Internet indispensável à vida moderna estão codificadas sob a forma de Javascript. Considerando as primeiras encarnações do Javascript, as páginas Web eram estáticas e ofereciam pouca interação com o utilizador para além de clicar em ligações

Índice

Os navegadores Web utilizam o Javascript para criar uma experiência dinâmica e interactiva para o utilizador. A maioria das aplicações e funções que tornam a Internet indispensável à vida moderna estão codificadas sob a forma de Javascript. Considerando as primeiras encarnações do Javascript, as páginas Web eram estáticas e ofereciam pouca interação com o utilizador para além de clicar em ligações e carregar novas páginas. 

Seguem-se algumas das melhorias dinâmicas do sítio Web que são efectuadas pelo Javascript.

  • Validação de entradas de formulários Web
  • Animação de elementos da página, como redimensionamento, deslocação e esbatimento
  • Carregar novos dados sem recarregar a página
  • Reprodução de áudio e vídeo
  • Reparar os problemas de compatibilidade do browser

Pode utilizar o scraping para recolher dados estruturados de sítios Web de forma automatizada. O Web scraping é também conhecido como extração de dados da Web. Alguns dos principais casos de utilização da raspagem da Web são os seguintes:

  • Acompanhamento das notícias
  • Inteligência de preços
  • Geração de contactos
  • Controlo dos preços
  • Estudos de mercado

Comecemos por compreender a necessidade de recolher dados de sítios Web.

Porque é que é necessário fazer scraping de um site Javascript?

As empresas utilizam a extração de dados da Web para utilizar a vasta quantidade de dados disponíveis publicamente para tomar decisões mais inteligentes. Seguem-se alguns dos domínios em que a extração de dados da Web é utilizada.

  • Comércio eletrónico
  • Redes sociais
  • Banca 
  • Finanças
  • Marketing 
  • Imóveis
  • Finanças
  • Otimização para motores de busca
  • Leads de vendas

Seguem-se as razões pelas quais as empresas necessitam de fazer scraping dos sítios Web.

Automatização - Não é possível copiar e colar todas as informações de um sítio Web. As empresas utilizam softwares de raspagem para automatizar a maioria dos processos associados.

Gestão de dados - Não é possível utilizar bases de dados e folhas de cálculo para gerir números e valores num sítio Web configurado em HTML. Por isso, as empresas utilizam ferramentas de recolha de dados da Web para gerir os seus dados.

Listagem de imóveis - Os agentes imobiliários utilizam a raspagem da Web para preencher a sua base de dados de imóveis disponíveis para aluguer ou venda. 

Dados de comparação de sítios de compras - As empresas utilizam a recolha de dados da Web para recolher dados sobre preços e produtos de cada retalhista, de modo a poderem fornecer aos seus utilizadores os dados de comparação desejados. 

Estatísticas e conhecimentos do sector - As empresas utilizam a recolha de dados para criar bases de dados maciças e extrair delas conhecimentos específicos do sector. Por exemplo, uma empresa pode recolher e analisar toneladas de dados sobre os preços do petróleo. Pode depois vender os seus conhecimentos a empresas petrolíferas de todo o mundo.

Raspagem de um site Javascript usando Python

Vejamos como pode utilizar o Selenium para recolher dados de sítios Web Javascript.

Instalar a biblioteca Selenium

Pode instalar o Selenium utilizando o seguinte comando.

pip install selenium

Instalar o controlador Web

Sabia que o Selenium simula um browser real? Não utiliza a sua instalação do Chrome, mas sim um controlador para executar um browser. Os controladores Web do Selenium referem-se tanto às ligações de linguagem como às implementações do código de controlo do browser individual. Tem de descarregar o controlador Web e pode adicioná-lo à variável de ambiente path. Iremos utilizar o web driver do Firefox e pode instalá-lo seguindo esta ligação.

Exemplo

Consideremos um exemplo simples de selénio que envolve a recolha do título de um sítio Web. Para isso, vamos primeiro importar o webdriver do selenium num ficheiro python, como se mostra abaixo:

from selenium import webdriver

Temos de mencionar o caminho onde o webdriver está localizado. De seguida, temos de inicializar o web driver do Firefox.

WEBDRIVER_PATH = './'
driver = webdriver.Firefox(WEBDRIVER_PATH)

Agora definimos o URL para obter o título do sítio Web.

URL = 'https://www.google.com'
driver.get(URL)
imprimir (driver.title)

A execução do código acima abre uma janela do firefox que imprime na consola o título do sítio Web. Neste caso, definimos o URL do Google como exemplo, pelo que o resultado será o seguinte:

Esta é a página do Google a partir do controlador Web do firefox. O título impresso na consola será o seguinte:

Temos de fechar manualmente a janela do firefox que foi aberta. Acrescentaremos driver.quit() no final do nosso código para que a janela seja fechada automaticamente após a conclusão do trabalho. 

from selenium import webdriver 

WEBDRIVER_PATH = './'
driver = webdriver.Firefox(WEBDRIVER_PATH) 

URL = 'https://www.google.com'
driver.get(URL)
imprimir (driver.title)
driver.quit()

Caso pretenda recolher dados de um sítio Web dinâmico, pode seguir os mesmos passos mencionados acima. Por exemplo, se quiser obter o título do Youtube, pode utilizar o código abaixo.

from selenium import webdriver 
 
WEBDRIVER_PATH = './' 
driver = webdriver.Firefox(WEBDRIVER_PATH) 
URL = 'https://www.youtube.com'
driver.get(URL)
imprimir (driver.title)
driver.quit()

Vamos tentar algo novo aqui. Podemos editar a caixa de pesquisa e preenchê-la com a palavra "Selenium" usando a classe "Keys", conforme mostrado abaixo.

from selenium.webdriver.common.keys import Keys

Depois de inicializar o firefox web driver e obter o título do Youtube, criamos um objeto que contém a caixa de pesquisa com xpath.

search_box = driver.find_element_by_xpath('//input[@id="search"]')

Em seguida, editamos o conteúdo da caixa de pesquisa e preenchemo-lo com a palavra "Selenium".

search_box.send_keys('Selenium')

Depois de preenchermos a caixa de pesquisa com o conteúdo pretendido, podemos premir "Enter" para ativar a pesquisa.

caixa_de_busca.send_keys(Chaves.ENTER)

Pode ver na imagem abaixo que a caixa de pesquisa do Youtube contém a palavra "Selenium".

Utilizar um proxy

Os proxies são necessários quando é preciso um conteúdo web localizado. Também são necessários quando se enviam demasiados pedidos para um sítio Web num curto período de tempo. Necessita de proxies para o Selenium quando são necessários testes automatizados. No entanto, para utilizar um proxy do Selenium para raspar um Web site Javascript, é necessário utilizar um fio do Selenium que estenda as ligações do Selenium e dê acesso aos pedidos subjacentes efectuados pelo browser.

Para utilizar o Selenium com um proxy, o seguinte é o pacote que precisa de instalar.

from selenium wire import webdriver

Depois de instalar a biblioteca Python selenium-wire, é necessário mencionar o seguinte:

  • nome de utilizador do proxy
  • palavra-passe_proxy
  • proxy_url
  • porta_proxy

Aqui mencionámos um número de porta aleatório 8080 como exemplo. Pode definir o nome de utilizador, a palavra-passe e o URL do sítio Web pretendido à sua escolha.

proxy_username = "USER_NAME"
proxy_password = "PASSWORD"
proxy_url = "Any Website URL"
proxy_port = 8080

options = {
    "proxy": {
        "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}:{proxy_port}",
        "verify_ssl": False,
    },
}

Para o controlador Web Selenium, os proxies residenciais são a melhor escolha. Isto deve-se ao facto de não serem facilmente detectados, ao contrário dos proxies de centros de dados. Encaminham os pedidos dos clientes através de IPs residenciais e ganham mais confiança do que os IPs de centros de dados. Também são úteis para aceder a sites complexos que usam Javascript, como o Youtube, Google, Instagram, etc.

Por que usar proxies para raspar um site JS

É necessário utilizar proxies para raspar um sítio Web pelas seguintes razões

  • Os proxies são utilizados para melhorar a segurança e equilibrar o tráfego de Internet de um sítio Web.
  • Os web scrapers precisam de usar proxies para esconder a sua identidade e fazer com que o seu tráfego se pareça com o tráfego de um utilizador normal.
  • Os proxies são também utilizados para proteger os dados pessoais dos utilizadores da Web.
  • Os proxies ajudam a aceder aos sítios Web que estão bloqueados pelo mecanismo de censura do país.
  • É possível rastrear sítios Web utilizando proxies de uma forma fiável. 
  • Os proxies são valiosos quando é necessário extrair dados de produtos de retalhistas em linha. Isto porque permitem fazer o pedido a partir de uma determinada região geográfica e aceder ao conteúdo específico que o sítio Web apresenta para essa localização.
  • Os proxies ajudam-no a fazer um grande número de pedidos ao sítio Web alvo sem ser banido.
  • Pode utilizar proxies para estabelecer ligações simultâneas ilimitadas ao mesmo sítio Web ou a sítios Web diferentes.

Conclusão

A recolha de dados da Web é importante porque pode ser utilizada para:

  • Recolha de anúncios de produtos/serviços e recolha de informações sobre os respectivos orçamentos
  • Prever as tendências da moda para se manter competitivo
  • Explorar os canais das redes sociais e descobrir potenciais clientes, etc.

Além disso, discutimos como pode utilizar o Selenium para extrair o conteúdo de sítios Web com Javascript em Python. É possível extrair o conteúdo de sites estáticos, bem como de sites dinâmicos como o Youtube. Também é necessário utilizar proxies Selenium para testes automatizados. Os melhores proxies que pode utilizar são os proxies residenciais , pois são muito rápidos e não podem ser facilmente detectados, ao contrário de outros proxies.

Espero que tenha percebido como fazer scrape de um site Javascript usando Python.