import requests
from bs4 import BeautifulSoup
from ddgs import DDGS #mudou a biblioteca
import re
ddg = DDGS()
#retornando somente os links dos resultados
def search(query, max_results=6):
try:
results = ddg.text(query, max_results=max_results)
return [i["href"] for i in results]
except Exception as e:
raise e
for link in search(query):
print(link)
from bs4 import BeautifulSoup
import os
import re
from tavily import TavilyClient
TAVILY_API_KEY = os.environ.get("TAVILY_API_KEY")
if not TAVILY_API_KEY:
raise ValueError("A chave TAVILY_API_KEY não foi encontrada.")
cliente_tavily = TavilyClient(api_key=TAVILY_API_KEY)
cidade = "Belém do Pará"
tavily_query = f"restaurantes em {cidade} tripadvisor com maior quantidade de reviews e faixa de preço"
print("Iniciando busca agêntica por URLs do Tripadvisor com Tavily...")
tripadvisor_url = None
try:
tavily_results = cliente_tavily.search(query=tavily_query, max_results=5)
if tavily_results and tavily_results["results"]:
print(f"Tavily encontrou {len(tavily_results['results'])} resultados. Analisando...")
for result in tavily_results["results"]:
url = result["url"]
if "tripadvisor.com" in url or "tripadvisor.com.br" in url:
tripadvisor_url = url
break
if not tripadvisor_url:
print("Nenhum URL relevante do Tripadvisor foi encontrado nos primeiros resultados.")
else:
print("Tavily não encontrou resultados para a busca agêntica.")
except Exception as e:
print(f"Erro na busca agêntica com Tavily: {e}. Verifique sua chave API ou conexão.")
if tripadvisor_url:
'''
"limpar" URLs do TripAdvisor, removendo o código de paginação que o site adiciona quando você navega pelas páginas de comentários de
um estabelecimento.
No TripAdvisor, o link de um restaurante se parece com isto quando você está na página 2, 3 ou mais:
.../Restaurante_Review-g303404-d123456-or20-Belem...
O objetivo desse re.sub é transformar essa URL paginada de volta na URL principal (página 1) do restaurante, substituindo o trecho
-or20- (ou qualquer outro número) por um hífen simples -.
• -: Procura por um hífen literal no início do padrão.
• o: Procura pela letra "o" minúscula (que no TripAdvisor geralmente vem acompanhada do "r", como em -or10- ou -or20-, onde o "o" e o "r" indicam o offset / início da paginação).
• \d+: Procura por um ou mais dígitos numéricos em sequência (ex: 10, 20, 150).
• -: Procura por um hífen literal no final do padrão.
'''
clean_url = re.sub(r'-o\d+-', '-', tripadvisor_url)
tripadvisor_url = clean_url
print(f"✅ URL encontrada limpa de paginação.")
print("-" * 50)
print(f"URL Final do Tripadvisor para raspagem: {tripadvisor_url if tripadvisor_url else 'NÃO ENCONTRADO'}")
print("-" * 50)