Oi André, tudo certo?
Entendo seu problema. O módulo requests
é ótimo para fazer requisições HTTP, mas como você já percebeu, ele não lida diretamente com JavaScript. O requests-html
até tenta fazer isso, mas tem alguns problemas de manutenção, como o que você encontrou relacionado ao lxml
.
Alternativas Atualizadas
Aqui vão algumas opções mais atualizadas que você pode usar para lidar com JavaScript nas suas requisições web:
Playwright para Python
O Playwright é uma ótima alternativa para automação de navegadores. Ele tem suporte completo para executar JavaScript, capturar interações e renderizar páginas como um navegador faria.
Para usar o Playwright, você pode instalar com:
pip install playwright
python -m playwright install
Exemplo básico:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('https://example.com')
content = page.content() # Obter o conteúdo HTML após execução do JS
print(content)
browser.close()
Selenium
O Selenium é outra opção bem conhecida para automação de navegadores. Ele suporta múltiplos navegadores e permite interação com JavaScript de forma mais robusta.
Para usar o Selenium, instale com:
pip install selenium
E configure o WebDriver para o navegador de sua escolha (Chrome, Firefox, etc.).
Exemplo básico com Selenium:
from selenium import webdriver
# Você vai precisar de um driver (por exemplo, chromedriver para Chrome)
driver = webdriver.Chrome(executable_path="/path/to/chromedriver")
driver.get("https://example.com")
html_content = driver.page_source
print(html_content)
driver.quit()
Pyppeteer
O Pyppeteer é uma porta do Puppeteer para Python, que também oferece suporte completo para interação com JavaScript.
Instale com:
pip install pyppeteer
Exemplo básico:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://example.com')
content = await page.content() # Pega o HTML renderizado
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Essas alternativas são bem mais completas quando se trata de renderizar e interagir com páginas que utilizam JavaScript, e elas têm uma comunidade ativa e atualizações constantes. Se você precisa de algo mais robusto e confiável, recomendo o Playwright ou o Selenium, que são as opções mais populares para automação de navegador.
Espero que uma dessas soluções te ajude a resolver o problema! Qualquer coisa, só chamar.