Python - Bs4 usando PyExecJS | ||
Canal Qb |
import requestsfrom bs4 import BeautifulSoupimport execjs# solicita a página da webresponse = requests.get("https://www.example.com")# analisa o DOM da páginasoup = BeautifulSoup(response.content, 'html.parser')# encontra todos os elementos <script> na páginascripts = soup.find_all('script')# executa cada script usando PyExecJSfor script in scripts:execjs.eval(script.string)# imprime o DOM da páginaprint(soup.prettify())
Este código faz basicamente a mesma coisa que o exemplo anterior, exceto que usa a biblioteca PyExecJS em vez de PyV8 para executar os scripts JavaScript. A biblioteca PyExecJS suporta várias engines JavaScript, incluindo o V8, Node.js e o JavaScriptCore (o engine JavaScript usado pelo Safari). Você não precisa especificar qual engine usar, pois o PyExecJS escolhe o melhor disponível automaticamente.
Erro: AttributeError: 'NoneType' object has no attribute 'strip'
Para evitar o erro, você pode verificar se o script tem conteúdo antes de executá-lo. Aqui está um exemplo atualizado que deve funcionar corretamente:
import requestsfrom bs4 import BeautifulSoupimport execjs# solicita a página da webresponse = requests.get("https://www.example.com")# analisa o DOM da páginasoup = BeautifulSoup(response.content, 'html.parser')# encontra todos os elementos <script> na páginascripts = soup.find_all('script')# executa cada script usando PyExecJSfor script in scripts:# verifica se o script tem conteúdo de textoif script.string is not None:execjs.eval(script.string)# imprime o DOM da páginaprint(soup.prettify())
Este código faz a mesma coisa que o exemplo anterior, mas verifica se o conteúdo do script é nulo antes de executá-lo usando o execjs.eval(). Se o conteúdo do script for nulo, o script é ignorado e a execução continua sem gerar um erro.
Erro: raise ProgramError(value)
execjs._exceptions.ProgramError: SyntaxError: ')' esperado
O erro que você está recebendo pode ocorrer porque o código JavaScript que está sendo executado contém um erro de sintaxe.
Para corrigir esse erro, você pode verificar o código JavaScript para garantir que ele seja válido. Além disso, você pode usar a opção ignore_errors=True ao chamar execjs.eval() para ignorar quaisquer erros de sintaxe e continuar a execução do seu código Python. Isso pode ser útil se você não puder corrigir o erro de sintaxe no código JavaScript.
Aqui está um exemplo atualizado que usa a opção ignore_errors=True:
import requestsfrom bs4 import BeautifulSoupimport execjs# solicita a página da webresponse = requests.get("https://www.example.com")# analisa o DOM da páginasoup = BeautifulSoup(response.content, 'html.parser')# encontra todos os elementos <script> na páginascripts = soup.find_all('script')# executa cada script usando PyExecJSfor script in scripts:# verifica se o script tem conteúdo de textoif script.string is not None:try:execjs.eval(script.string)except execjs.ProgramError:# ignora erros de sintaxe no código JavaScriptpass# imprime o DOM da páginaprint(soup.prettify())
Este código faz a mesma coisa que os exemplos anteriores, mas usa a opção ignore_errors=True para ignorar quaisquer erros de sintaxe no código JavaScript que está sendo executado. Se ocorrer um erro de sintaxe, o código simplesmente continua sem gerar uma exceção.
0 Comentários