1 Instalação de Pacotes
pip install tavily-python duckduckgo-search selenium beautifulsoup4 python-dotenv
2 Configuração de Variáveis de Ambiente (.env)
TAVILY_API_KEY=SUA_CHAVE_AQUI
Carregando nenhum código:
import os
from dotenv import load_dotenv
load_dotenv()
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
3 Busca Regular com DuckDuckGo
from duckduckgo_search import DDGS
def busca_regular_restaurantes(cidade):
resultados = []
with DDGS() as ddgs:
for r in ddgs.text(f"melhores restaurantes em {cidade}", max_results=5):
resultados.append(r["href"])
return resultados
links = busca_regular_restaurantes("São Paulo")
print("Links encontrados:")
for link in links:
print(link)
URLs.
4 Busca Agência com Tavily
Agora o agente decide qual link do TripAdvisor é mais relevante.
from tavily import TavilyClient
tavily = TavilyClient(api_key=TAVILY_API_KEY)
def busca_agentica_tripadvisor(cidade):
resposta = tavily.search(
query=f"melhores restaurantes em {cidade} TripAdvisor",
search_depth="advanced",
max_results=5
)
for resultado in resposta["results"]:
if "tripadvisor" in resultado["url"]:
return resultado["url"]
url_tripadvisor = busca_agentica_tripadvisor("São Paulo")
print("URL escolhida pelo agente:")
print(url_tripadvisor)
sistema:
Pesquisa
Filtra
Escolhe automaticamente
Isso busca caracterizar a agência .
5 Web Scraping com Selenium + BeautifulSoup
Antes, instale o ChromeDriver compatível com seu navegador.
Inicializando o Selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
def extrair_dados_restaurantes(url):
options = Options()
options.add_argument("--headless") # Executa sem abrir navegador
driver = webdriver.Chrome(options=options)
driver.get(url)
time.sleep(5) # Aguarda carregamento dinâmico
soup = BeautifulSoup(driver.page_source, "html.parser")
restaurantes = []
cards = soup.find_all("div", class_="some-card-class") # ajustar para site real
for card in cards:
nome = card.find("span", class_="nome").text if card.find("span", class_="nome") else "N/A"
avaliacao = card.find("span", class_="avaliacao").text if card.find("span", class_="avaliacao") else "N/A"
tipo = card.find("span", class_="tipo").text if card.find("span", class_="tipo") else "N/A"
preco = card.find("span", class_="preco").text if card.find("span", class_="preco") else "N/A"
restaurantes.append({
"nome": nome,
"avaliacao": avaliacao,
"tipo": tipo,
"preco": preco
})
driver.quit()
return restaurantes
6 Executando Pipeline Completo
cidade = "São Paulo"
1️ Busca regular
print("Busca regular:")
print(busca_regular_restaurantes(cidade))
2️ Busca agêntica
url = busca_agentica_tripadvisor(cidade)
print("URL selecionada:", url)
3️ Scraping
dados = extrair_dados_restaurantes(url)
print("Dados extraídos:")
for r in dados:
print(r)