Descubra como extrair tabelas JavaScript com Python
Andrei Ogiolan em 24 de abril de 2023

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
- Carregue a página Web que contém a tabela utilizando o Selenium e um controlador Web.
- Extrair os dados da tabela utilizando Selenium e Python.
- 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

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.


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


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.
