![]() |
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.