CodeGym /Curso Java /Python SELF PT /Trabalhando com conteúdo JavaScript

Trabalhando com conteúdo JavaScript

Python SELF PT
Nível 33 , Lição 1
Disponível

1. Introdução às páginas dinâmicas

Se você já tentou fazer scraping de dados de sites que atualizam conteúdo automaticamente com JavaScript, sabe que isso pode ser um quebra-cabeça de verdade. Mas relaxa! Como dizem, qualquer código complicado pode ser ajustado para parecer mágica. Bora entender como o requests_html deixa a gente trabalhar com esse tipo de conteúdo.

Como se sabe, nem todas as páginas web são igualmente úteis. Algumas carregam o conteúdo direto, enquanto outras podem gerar ou atualizar isso dinamicamente com JavaScript. Isso cria uns perrengues pra quem quer puxar os dados, porque o HTML que a gente vê com ferramentas de dev pode ser diferente do HTML que recebemos ao fazer uma requisição comum.

Problemas ao fazer scraping de conteúdo dinâmico

A maioria das bibliotecas para web, como requests, só trabalham com respostas do servidor e não conseguem rodar JavaScript. Isso significa que, se o conteúdo carrega ou muda via JavaScript, pode ser que você nem veja esses dados com uma requisição padrão.

2. Usando a biblioteca requests_html

É aqui que entra o requests_html — uma biblioteca que combina a simplicidade do requests com a força de um navegador para rodar JavaScript. Ele te dá um motor básico de renderização que permite interagir com páginas dinâmicas como se você estivesse usando um navegador de verdade.

Instalando e configurando a biblioteca

Bora começar instalando o requests_html. Abra seu terminal favorito e rode o seguinte comando:

Bash
pip install requests-html

Pronto, biblioteca instalada! Agora já podemos trabalhar com ela.

Fundamentos de como usar o requests_html para extrair conteúdo em JavaScript

O requests_html facilita nossa vida. Vem cá ver como isso funciona na prática. Imagine que a gente tem uma página que gera alguns dados via JavaScript.

Python

from requests_html import HTMLSession

# Criando uma sessão HTML
session = HTMLSession()

# Fazendo uma requisição para a página web
response = session.get('https://example-dynamic-page.com')

# Renderizando o JavaScript
response.html.render()

# Extraindo dados
data = response.html.find('#dynamic-content', first=True)
print(data.text)

Isso é mágica! Diferente do requests, o requests_html tem o método .render(), que permite "rodar" a página e executar o JavaScript. Assim que a página "ganha vida", você consegue pegar todos os dados necessários usando os seletores que estudamos antes.

3. Exemplos de extração de dados

Agora, vamos nos aprofundar e olhar alguns exemplos pra você sacar como o requests_html salva a gente em diversos cenários.

Extração prática de dados de páginas dinâmicas

Imagine uma página que carrega as últimas notícias só depois de você rolar a tela pra baixo. Com o requests_html, a gente pode simular o comportamento do usuário.

Python

url = 'https://example-news-site.com'

# Carrega a página
response = session.get(url)

# Renderiza com timeout maior, se necessário
response.html.render(timeout=20)

# Encontra os elementos de notícias
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

Olha só como foi tranquilo acessar o conteúdo que antes parecia inatingível!

Trabalhando com conteúdo carregado pelo JavaScript usando requests_html

Com o requests_html e os seletores CSS que vimos nas aulas anteriores, você consegue manipular o conteúdo das páginas web como se já fosse um ninja do scraping!

Python

# Seleciona o primeiro elemento de manchete de notícia
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Extraindo o link do elemento
link = headline.find('a', first=True).attrs['href']
print(link)

4. Dicas práticas e truques

Apesar de o requests_html ser uma ferramenta poderosa, tem umas coisas que vale a pena lembrar ao usá-lo:

  • Timeouts e atrasos: Não esqueça de ajustar timeouts de renderização para páginas mais complexas. Isso ajuda a evitar erros causados por carregamentos lentos.
  • Consumo de recursos: O requests_html pode ser pesado, já que precisa renderizar JavaScript. Para grandes volumes de dados ou páginas complexas, isso pode deixar o processo mais devagar.
  • CAPTCHA e proteções anti-bot: O requests_html não consegue burlar captchas e proteções anti-bot, então pra casos mais hardcore é melhor usar o Selenium.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION