Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] [Projeto] Faça como eu fiz: Busca agêntica e scraping parte 1

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)

1 resposta

Fala, Marcelo! Tudo bom?

Agradeço por trazer sua solução para o fórum!

Curti demais como trabalhou a integração de bibliotecas, destacou a importância da limpeza de URLs e ainda reforçou o uso da busca agêntica com Tavily para encontrar resultados relevantes. Essa implementação mostra atenção aos detalhes, preocupação com eficiência e clareza na explicação de cada etapa, tornando o código mais robusto e didático.

E algumas boas práticas que você pode adotar são:

  • Documentar funções: incluir docstrings para explicar entradas e saídas de cada função.
  • Tratar exceções com mensagens claras: isso ajuda na depuração e na manutenção futura.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Ah, uma pergunta: o que você considera mais interessante evoluir primeiro, otimizar ainda mais o tratamento das URLs para raspagem ou expandir a integração com outras fontes além do Tripadvisor?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!