Criei um scraper do Perplexity em Python com suporte a todas as funções da versão web (até as escondidas)
A API oficial do Perplexity é excelente em estabilidade, mas tem dois grandes defeitos: é paga à parte e limita você aos modelos proprietários deles (família "Sonar").
Se você já assina o Perplexity Pro ou Max, é frustrante: você tem acesso a modelos incríveis como Claude Sonnet/Opus 4.5, Gemini 3 Pro e GPT-5.2 no navegador, mas não consegue usá-los via código sem pagar uma fortuna nas APIs originais de cada fornecedor.
Para resolver isso, criei o Perplexity WebUI Scraper.
Minha meta foi simples: desbloquear o acesso programático a TUDO que a conta paga oferece na web.
O Pulo do Gato (The Catch)
Diferente da API oficial, este projeto funciona como uma "ponte": ele simula um navegador real para que você possa consumir via código os modelos que a API deles não vende.
- Sua Assinatura, Suas Regras: Se sua conta tem acesso ao Claude Sonnet 4.5 ou Gemini 3 Pro, meu scraper permite que você os use em seus scripts Python. Nada de ficar preso ao "Sonar".
- Modelos "Thinking" via API: Sabe os novos modelos de raciocínio profundo que aparecem no dropdown do site? Agora você pode integrá-los em suas automações.
- Contexto Real: Suporte nativo a Upload de Arquivos (PDF, imagens, TXT) enviando para o S3 interno deles e seleção de focos de busca (Academic, YouTube, Reddit).
Engenharia "Anti-Bot"
Para isso funcionar de forma estável, não bastava fazer requisições HTTP simples. Implementei:
- Impersonation Avançado: Uso de
curl-cffipara simular a impressão digital (TLS/JA3) de um Chrome legítimo, evitando bloqueios do Cloudflare. - CLI de Autenticação: Uma ferramenta que automatiza o login chato (Magic Link/Email) e salva seu token de sessão pronto para uso.
Show me the code
O projeto é 100% tipado, assíncrono e feito para quem gosta de código limpo.
from perplexity_webui_scraper import Perplexity, Models
# Usa sua sessão real para acessar os modelos pagos
client = Perplexity("seu_token_aqui")
chat = client.create_conversation(
source_focus=[SourceFocus.WEB, SourceFocus.ACADEMIC]
)
# Exemplo: usando o Claude Sonnet 4.5 (que não tem na API oficial) via código
response = chat.ask(
query="Analise este edital e encontre as pegadinhas.",
model=Models.CLAUDE_45_SONNET_THINKING,
files=["./edital_concurso.pdf"]
)
print(response.answer)
# Retorna streaming (opcional), citações e fontes estruturadas