Descubra como extrair tabelas JavaScript com Python

Andrei Ogiolan em 24 de abril de 2023

imagem do blogue

Introdução

O Web scraping é uma ferramenta poderosa que lhe permite extrair dados de sítios Web e utilizá-los para uma variedade de fins. Pode ser usado para reunir dados para inteligência comercial, rastrear alterações em sites ou criar seus próprios aplicativos da Web. Neste artigo, vamos concentrar-nos em como extrair tabelas JavaScript usando Python.

O que são tabelas JavaScript?

As tabelas JavaScript são uma forma comum de apresentar dados tabulares na Web e podem ser encontradas numa grande variedade de sítios Web. A extração dessas tabelas pode ser um desafio porque os dados são frequentemente incorporados no código-fonte da página como um objeto JavaScript, em vez de uma tabela HTML padrão. No entanto, com as ferramentas e técnicas certas, é possível extrair esses dados usando Python.

Começaremos por configurar as ferramentas necessárias e instalar as bibliotecas necessárias. Em seguida, percorreremos o processo de utilização do Python e de um controlador Web para carregar a página Web e extrair os dados da tabela. Por fim, discutiremos algumas formas de melhorar a eficiência e a fiabilidade do processo de raspagem e por que razão poderá ser melhor utilizar um raspador profissional para tarefas mais complexas.

Configuração

Antes de podermos começar a extrair tabelas JavaScript com Python, existem 2 pré-requisitos que precisamos de ter em conta:

  • Python: Este tutorial assume que tem o Python instalado na sua máquina. Se não tiver o Python instalado, pode descarregá-lo a partir do site oficial e seguir as instruções para o seu sistema operativo.
  • Um driver web: Para carregar e interagir com páginas web usando Python, precisaremos usar um driver web. Existem várias opções disponíveis, como ChromeDriver, FirefoxDriver e SafariDriver. Para este tutorial, usaremos o ChromeDriver.

Quando tiver o Python e um controlador Web instalados, terá de instalar as seguintes bibliotecas:

  • Selenium: O Selenium é uma biblioteca que permite controlar um navegador web através de Python. Vamos usá-la para carregar e interagir com a página da Web que contém a tabela. Quando se trata de tabelas JavaScript, é importante utilizar uma biblioteca como o Selenium em vez de pedidos Python, porque pode esperar até que um elemento gerado por JavaScript apareça na página, caso não esteja presente quando a página Web é carregada.
  • Pandas: Pandas é uma biblioteca que fornece estruturas de dados fáceis de usar e ferramentas de análise de dados para Python. Utilizá-la-emos para armazenar e manipular os dados que extraímos da tabela.

Para instalar estas bibliotecas, abra um terminal ou uma linha de comandos e utilize o comando pip para as instalar:

$ pip install selenium pandas

É isso aí! Agora você está pronto para começar a raspar tabelas JavaScript com Python. Na próxima secção, vamos percorrer o processo passo a passo.

Vamos começar a raspar

Agora que temos todas as ferramentas necessárias instaladas, é hora de começar a extrair tabelas JavaScript com Python. O processo envolve as seguintes etapas

  1. Carregue a página Web que contém a tabela utilizando o Selenium e um controlador Web.
  2. Extrair os dados da tabela utilizando Selenium e Python.
  3. Armazenar e manipular os dados utilizando o Pandas.

Vamos analisar cada um destes passos com mais pormenor:

Passo 1: Carregar a página Web

A primeira coisa que precisamos de fazer é carregar a página Web que contém a tabela que queremos extrair. Podemos fazer isso usando o Selenium e um driver da Web.

Primeiro, vamos importar as bibliotecas necessárias:

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

import time

De seguida, vamos criar uma instância do controlador Web e utilizá-la para carregar a página Web:

# Substitua "path/to/chromedriver" pelo caminho para o executável do ChromeDriver

driver = webdriver.Chrome(service=Service('path/to/chromedriver'))

# Carregue a página Web

driver.get('https://html.com/tags/table/')

É importante notar que a página web deve ser totalmente carregada antes de extrair os dados da tabela. Poderá ser necessário utilizar a função driver.implicitly_wait() para esperar que a página seja carregada, ou utilizar a função driver.find_element(By.*, '') para esperar que um elemento específico da página seja carregado.

Passo 2: Extrair os dados

Depois que a página da Web é carregada, podemos usar o Selenium para extrair os dados da tabela. Há várias maneiras de fazer isso, mas um método é usar a função driver.find_elements(By.CSS_SELECTOR, 'td') para localizar as células na tabela e extrair o texto de cada célula.

Eis um exemplo de como extrair os dados de uma tabela simples com duas colunas:

# Encontrar todas as linhas na tabela

rows = driver.find_elements(By.CSS_SELECTOR, 'table tr')

# Para cada linha, encontrar as células e extrair o texto

for row in rows:

try:

cells = row.find_elements(By.CSS_SELECTOR, 'td') or row.find_elements(By.CSS_SELECTOR, 'th')

except:

continue

for cel in cells:

print(cel.text, end= " ")

print()

driver.quit()

Lembre-se de que pode ser necessário utilizar um seletor CSS diferente, dependendo da estrutura da tabela e dos elementos que contém. Pode utilizar as ferramentas de desenvolvimento do seu browser para inspecionar a página e encontrar o seletor adequado.

Etapa 3: Armazenar e manipular os dados

Depois de extrair os dados da tabela, pode armazená-los numa estrutura de dados Pandas e manipulá-los conforme necessário. Aqui está um exemplo de como fazer isso:

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

import time

import pandas as pd

df = pd.DataFrame()

driver = webdriver.Chrome(service=Service('/path/to/chromedriver'))

# Utilizar o webdriver para carregar uma página Web

driver.get('https://html.com/tags/table/')

# Ao extrair conteúdo gerado por JavaScript, é importante aguardar alguns segundos

time.sleep(4)

table = driver.find_element(By.CSS_SELECTOR, 'table')

# Para cada linha, encontre as células e extraia o texto

df = pd.read_html(table.get_attribute('outerHTML'))

print(df)

driver.close()

Mergulhar mais fundo

Embora os passos descritos acima lhe permitam extrair tabelas JavaScript utilizando Python, existem algumas formas de melhorar a eficiência e a fiabilidade do processo.

Uma forma de melhorar a eficiência é utilizar um navegador sem cabeça, que é um navegador que é executado em segundo plano sem uma GUI. Isso pode ser mais rápido do que executar um navegador completo e consome menos recursos. Para utilizar um browser sem cabeça com o Selenium, pode utilizar o sinalizador --headless ao criar a instância do controlador Web.

Outra forma de melhorar a eficiência é utilizar um serviço que forneça endereços IP rotativos, como um servidor proxy. Isto pode ajudá-lo a evitar ser detectado como um raspador e bloqueado pelo sítio Web, uma vez que o endereço IP do pedido parecerá mudar a cada pedido. O WebScrapingAPI é um serviço que oferece a possibilidade de raspar um sítio Web utilizando um servidor proxy. Para saber mais sobre como utilizar proxies para a recolha de dados na Web, consulte os nossos documentos.

Para usar um servidor proxy com o Selenium, eu recomendo fortemente que você use o selenium-wire, já que ele é mais direto do que o Selenium simples quando se trata de se conectar a um servidor proxy. Assim como qualquer outro pacote Python, você pode simplesmente instalá-lo executando o seguinte comando:

$ pip install selenium-wire

Em seguida, pode utilizar o seguinte exemplo de codificação para utilizar um servidor proxy com o Selenium:

from seleniumwire import webdriver

from selenium.webdriver.chrome.service import Service

import time

# Create a webdriver instance with the desired proxy server and authentication details

API_KEY = '<YOUR-API-KEY-HERE>'

options = {

'proxy': {

'http': f'http://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',

'https': f'https://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',

'no_proxy': 'localhost,127.0.0.1'

}

}

driver = webdriver.Chrome(service=Service('/path/to/chromedriver'), seleniumwire_options=options)

# Use the webdriver to load a webpage

driver.get('http://httpbin.org/ip')

# When scraping JavaScript generated content it is important to wait a few seconds

time.sleep(5)

# Do something with the page, such as extract data or take a screenshot

# ...

# Close the webdriver

driver.quit()

Embora estas técnicas possam ser úteis para melhorar a eficiência e a fiabilidade da sua recolha de dados da Web, é importante notar que estão para além do âmbito deste artigo. Para tarefas de raspagem mais complexas, pode ser mais eficiente e fiável utilizar um raspador profissional, como o WebScrapingAPI. Esta ferramenta fornece funcionalidades adicionais, como a rotação de IP e o desvio CAPTCHA, que podem tornar o processo de raspagem muito mais fácil e fiável.

Na próxima secção, vamos resumir os passos para extrair tabelas JavaScript com Python e discutir as vantagens de utilizar um extrator profissional para tarefas mais complexas.

Resumo

Concluindo, a extração de tabelas JavaScript com Python é uma maneira poderosa de extrair dados de sites e usá-los para uma variedade de finalidades. Quer esteja a utilizar o seu próprio código ou um scraper profissional, esta técnica pode ser uma ferramenta valiosa para recolher dados e obter informações.

Notícias e actualizações

Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

miniatura
GuiasComo extrair dados de produtos da Amazon: Um guia abrangente de melhores práticas e ferramentas

Explore as complexidades da extração de dados de produtos da Amazon com nosso guia detalhado. De práticas recomendadas e ferramentas como a API Amazon Scraper a considerações legais, saiba como enfrentar desafios, contornar CAPTCHAs e extrair insights valiosos com eficiência.

Suciu Dan
avatar do autor
Suciu Dan
15 min. de leitura
miniatura
GuiasSaiba como contornar a deteção do Cloudflare com o melhor navegador Selenium

Saiba qual é o melhor browser para contornar os sistemas de deteção Cloudflare enquanto faz web scraping com o Selenium.

Mihnea-Octavian Manolache
avatar do autor
Mihnea-Octavian Manolache
9 min. de leitura
miniatura
GuiasDescubra como extrair tabelas HTML com Golang

Aprenda a raspar tabelas HTML com Golang para uma poderosa extração de dados. Explore a estrutura das tabelas HTML e crie um raspador da Web usando a simplicidade, a simultaneidade e a robusta biblioteca padrão do Golang.

Andrei Ogiolan
avatar do autor
Andrei Ogiolan
8 min. de leitura