CodeGym /Cursos /Python SELF PT /Carregando conteúdo dinâmico com requests_html

Carregando conteúdo dinâmico com requests_html

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

1. Conteúdo dinâmico e JavaScript

Se você já se familiarizou com os fundamentos de web scraping usando bibliotecas como BeautifulSoup e requests, chegou a hora de mergulhar em aspectos mais emocionantes dessa atividade. Hoje vamos falar sobre como lidar com conteúdo que é carregado dinamicamente apenas enquanto você rola a página. Seu navegador pode não ser o único fã de feeds infinitos, agora você pode ensinar isso aos seus scripts também! 🤖

A internet está cheia de páginas carregadas dinamicamente, onde o conteúdo é atualizado e aparece apenas por interação com o JavaScript, que, por sua vez, "faz a mágica" no lado do cliente. Isso pode ser tanto uma bênção quanto uma maldição para o scraper. Por um lado, esses sites podem ser mais interativos e fáceis de usar. Por outro, fazer scraping dessas páginas torna-se mais complicado porque a biblioteca requests não compreende JavaScript.

2. A biblioteca requests_html

Felizmente, como você já sabe, neste mundo existe o requests_html — uma biblioteca que combina o poder do requests com as possibilidades de renderização semelhante à de um navegador fornecidas pelo Pyppeteer. Essa biblioteca permite carregar e renderizar páginas com conteúdo dinâmico, dando a você a capacidade de executar JavaScript e até de rolar as páginas.

Instalando o requests_html

Para começar a usar, você precisa instalar a biblioteca. Se ainda não fez isso, execute o comando:

Bash
pip install requests-html

Trabalhando com requests_html

Depois de instalar, vamos analisar como usar o requests_html para carregar e trabalhar com conteúdo dinâmico.

Exemplo: Carregando e renderizando uma página

Começaremos com um caso simples: carregar uma página, executar JavaScript e extrair dados. Vamos examinar um exemplo onde carregamos uma página e obtemos o texto de um elemento que só aparece após a execução do JavaScript.

Python

from requests_html import HTMLSession

# Criar uma sessão
session = HTMLSession()

# Carregar a página
response = session.get('https://example.com/dynamic-page')

# Executar JavaScript para renderizar a página
response.html.render()

# Extrair o texto de um elemento que aparece após renderizar
content = response.html.find('#dynamic-content', first=True)
print(content.text)

Neste exemplo, usamos o método render(), para permitir que o requests_html execute o JavaScript na página e renderize o conteúdo que pode estar oculto no carregamento padrão.

3. Scroll automático de páginas

Às vezes, o conteúdo dinâmico não é carregado imediatamente, mas aparece conforme você rola a página. O requests_html pode ajudar aqui também, permitindo que você simule o scroll da página e carregue mais dados.

Exemplo de scroll automático

Suponha que você tem uma página com um feed infinito de notícias, e você quer extrair o máximo de elementos possível. Veja como isso pode ser feito:

Python

from requests_html import HTMLSession

session = HTMLSession()
response = session.get('https://example.com/infinite-scroll')

# Renderizar e rolar a página
response.html.render(scrolldown=5, sleep=1)

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

for news_item in news_items:
    print(news_item.text)

Aqui, o método render() foi complementado com os parâmetros scrolldown e sleep, que especificam quantas vezes vamos rolar a página para baixo e quanto tempo esperamos entre os scrolls.

4. Aplicações práticas

Por que se dar ao trabalho com algo como scroll automático? 🤔

  • Pesquisas de mercado: Muitas empresas usam essas páginas para exibir constantemente dados que podem ser úteis para análise de tendências e comportamento do consumidor.
  • Monitoramento de redes sociais: Muitas plataformas de redes sociais usam feeds infinitos, tornando o requests_html uma ferramenta útil para monitorar e coletar dados desses ambientes.
  • Notícias e atualizações: Extrair manchetes e artigos de feeds infinitos de sites de notícias permite obter informações atualizadas para análise.

5. Erros comuns e como resolvê-los

Durante o trabalho com páginas dinâmicas e requests_html, é comum encontrar alguns erros. Vamos analisar alguns problemas típicos:

Problema com renderização

Às vezes, o método render() pode não ser concluído com sucesso, especialmente se a página for muito grande ou complicada. Nesses casos, aumentar o tempo de renderização com o parâmetro timeout, ou reduzir o número de scrolls pode ajudar.

Python
response.html.render(timeout=30)

Execução problemática de script

Podem existir situações em que o JavaScript na página bloqueia a execução do script ou causa problemas. Tente usar o parâmetro wait para aguardar os elementos necessários aparecerem.

Python
response.html.render(wait=2)

Resolução de tela e tipo de dispositivo

Alguns sites podem fornecer conteúdo dependendo da resolução da tela ou do tipo de dispositivo. Verifique qual user-agent está sendo usado na requisição e o conteúdo renderizado.

Python

response.session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

6. Leituras adicionais

O requests_html é uma ferramenta poderosa, mas para aproveitar totalmente suas capacidades e evitar erros típicos, estude a documentação oficial. Lá você encontrará materiais úteis para entender melhor como gerenciar rolagens e renderizar páginas complexas com sucesso.

A esta altura, você está preparado para enfrentar conteúdos dinâmicos e feeds infinitos. Mas seja responsável, lembre-se de informar que seu script é um "hacker do bem" que adora ajudar os outros a automatizar suas tarefas, e não um malfeitor! 😇

1
Tarefa
Python SELF PT, nível 33, lição 4
Bloqueado
Carregamento e impressão de conteúdo dinâmico
Carregamento e impressão de conteúdo dinâmico
2
Tarefa
Python SELF PT, nível 33, lição 4
Bloqueado
Rolagem automática e extração de elementos
Rolagem automática e extração de elementos
3
Tarefa
Python SELF PT, nível 33, lição 4
Bloqueado
Sistema de monitoramento de conteúdo dinâmico
Sistema de monitoramento de conteúdo dinâmico
4
Tarefa
Python SELF PT, nível 33, lição 4
Bloqueado
Integração de um scraper com API para coleta de dados
Integração de um scraper com API para coleta de dados
1
Pesquisa/teste
Leitura de conteúdo dinâmico, nível 33, lição 4
Indisponível
Leitura de conteúdo dinâmico
Leitura de conteúdo dinâmico
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION