E aí, futuros mestres da automação! Hoje vamos aprender como usar Selenium para extrair textos e atributos de elementos de uma página web. Essa é uma ferramenta poderosa no seu arsenal, porque no universo do web scraping, o principal é saber extrair informações. Prontos para garimpar dados preciosos das profundezas da internet? Então bora começar!
1. Sobre o que é essa aula?
- Fundamentos da extração de dados: Como pegar texto de elementos HTML, o que já soa como uma missão heróica.
- Obtendo atributos: Como conseguir coisas bacanas, como links
(href)e imagens(src), para depois fazer algo incrível com eles. - Exemplos práticos: Vamos praticar extraindo dados de tabelas e listas de uma página web. Afinal, como dizia um grande programador: "Se você não colocou a mão no código, não entendeu de verdade".
2. Extraindo textos de elementos
Imagina que você tem um site lindão cheio de informações úteis. Você precisa pegar o texto de elementos como cabeçalhos, parágrafos e outros elementos HTML. Como fazer isso? É aí que o Selenium entra na jogada.
Exemplo
from selenium import webdriver
# Configuramos o driver para o Chrome
driver = webdriver.Chrome()
# Abrimos o site
driver.get("https://example.com")
# Encontramos o elemento pela classe e extraímos o texto
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Texto extraído:", text)
# Não esqueça de fechar o navegador
driver.quit()
Aqui usamos o método .text para obter o conteúdo textual do elemento. Mais fácil do que decorar todas as exceções no Python, né?
3. Extraindo atributos de elementos
Texto é legal, mas e quando você precisa de algo mais específico, tipo a URL de um link ou o link de uma imagem? Selenium também é seu parceiro nessa tarefa.
Exemplo
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# Encontramos o elemento pelo seletor CSS e extraímos o atributo 'href'
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("URL do link:", link_href)
# Encontramos o elemento pelo ID e extraímos o atributo 'src'
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("URL da imagem:", img_src)
driver.quit()
Como você pode ver, é o mesmo procedimento, só que ao invés de .text, usamos o método .get_attribute("nome_do_atributo"). Métodos simples, mas bem potentes!
4. Aplicando métodos na prática
Vamos da teoria para a prática, porque programadores geralmente não gostam de ficar só na abstração. Vamos ver um exemplo onde extraímos dados de uma tabela numa página web.
Extraindo dados de tabelas
Imagine que você precisa pegar todas as linhas de uma tabela de um site e exibi-las no console. Veja como isso pode ser feito:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
# Encontramos a tabela pelo ID
table = driver.find_element_by_id("example-table")
# Pegamos todas as linhas da tabela
rows = table.find_elements_by_tag_name("tr")
for row in rows:
# Pegamos todas as células na linha atual
cells = row.find_elements_by_tag_name("td")
for cell in cells:
print(cell.text, end=' ')
print()
driver.quit()
Primeiro encontramos a tabela, depois iteramos por todas as linhas e células dela, obtendo e exibindo seu texto. É como resolver um quebra-cabeça complicado, mas que no final faz tudo fazer sentido!
5. Erros comuns e como evitá-los
Antes de mergulharmos nessa aventura de código para extrair dados, vamos falar sobre erros comuns que você pode encontrar.
Quando você trabalha com páginas dinâmicas, o tempo pode ser seu inimigo. Se você tentar pegar o texto ou atributo de um elemento que ainda não foi carregado, vai receber o erro NoSuchElementException. É como tentar abrir um presente antes da hora. Para evitar isso, use esperas explícitas (WebDriverWait) ao invés de contar com a sorte.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
)
print(element.text)
finally:
driver.quit()
Aqui usamos WebDriverWait e expected_conditions para esperar o carregamento do elemento. É como esperar o bolo ficar pronto para poder saborear!
GO TO FULL VERSION