Este blog é um complemento do nosso canal no YouTube. Clique em @CanalQb para seguir e acompanhar nossos vídeos!

Sugestões de pesquisas

Python BeautifulSoup e PyExecJS: Como Executar Scripts JavaScript em Web Scraping

#Python; #WebScraping; #BeautifulSoup
@CanalQb Python - BeautifulSoup (bs4) usando PyExecJS para executar JavaScript
@CanalQb

Introdução ao uso de BeautifulSoup e PyExecJS

Este tutorial mostra como combinar a biblioteca BeautifulSoup com a execução de scripts JavaScript usando a biblioteca PyExecJS para aprimorar seus projetos de web scraping em Python.

Enquanto o BeautifulSoup é uma ferramenta poderosa para analisar o HTML estático das páginas, muitas páginas modernas carregam conteúdo dinâmico via JavaScript. Com o PyExecJS, é possível executar scripts JavaScript presentes na página para obter ou manipular informações que dependem de código dinâmico.

Exemplo básico de uso

A seguir, um exemplo simples que faz uma requisição HTTP, analisa o DOM da página com BeautifulSoup e executa os scripts JavaScript encontrados usando PyExecJS:

import requests
from bs4 import BeautifulSoup
import execjs

# Solicita a página da web
response = requests.get("https://www.example.com")

# Analisa o DOM da página
soup = BeautifulSoup(response.content, 'html.parser')

# Encontra todos os elementos <script> na página
scripts = soup.find_all('script')

# Executa cada script usando PyExecJS
for script in scripts:
    execjs.eval(script.string)

# Imprime o DOM da página
print(soup.prettify())

O que este código faz?

  • Faz a requisição HTTP para obter o conteúdo da página.
  • Usa BeautifulSoup para analisar o HTML e encontrar as tags <script>.
  • Executa o conteúdo de cada script com PyExecJS, que utiliza engines JavaScript como V8 ou Node.js.
  • Exibe o DOM estruturado com o método prettify().

Tratando erros comuns

Durante a execução, é possível encontrar erros como AttributeError: 'NoneType' object has no attribute 'strip' ou erros de sintaxe no JavaScript, como SyntaxError: ')' esperado. Para evitar esses problemas, é importante validar o conteúdo dos scripts antes da execução e tratar exceções.

Exemplo atualizado com verificações e tratamento de erros

import requests
from bs4 import BeautifulSoup
import execjs

# Solicita a página da web
response = requests.get("https://www.example.com")

# Analisa o DOM da página
soup = BeautifulSoup(response.content, 'html.parser')

# Encontra todos os elementos <script> na página
scripts = soup.find_all('script')

# Executa cada script usando PyExecJS com tratamento de erros
for script in scripts:
    # Verifica se o script tem conteúdo de texto
    if script.string is not None:
        try:
            execjs.eval(script.string)
        except execjs.ProgramError:
            # Ignora erros de sintaxe no código JavaScript
            pass

# Imprime o DOM da página
print(soup.prettify())

Por que é importante este cuidado?

Nem todos os scripts encontrados na página são válidos ou completos para serem executados fora do contexto original, o que pode causar erros. Esse código evita que o script quebre a execução do seu programa, garantindo maior estabilidade e robustez.

Considerações finais

O uso conjunto de BeautifulSoup e PyExecJS permite que você realize web scraping em páginas que dependem de JavaScript para renderizar conteúdo, aumentando muito o alcance dos seus projetos.

Lembre-se de sempre respeitar as políticas dos sites que você acessar e analisar se o scraping está permitido para evitar problemas legais.

Para mais informações sobre o PyExecJS, visite o repositório oficial no GitHub: https://github.com/doloopwhile/PyExecJS

Este conteúdo é educativo e recomenda que o leitor faça uma autoanálise antes de aplicar técnicas avançadas em seus projetos.

Postar um comentário

Comente só assim vamos crescer juntos!
CanalQb mais próximo Quer falar com o CanalQb?
Em que posso te ajudar?
Fale comigo