Monitorar Preços de Concorrentes

Configure o monitoramento automatizado de preços em sites de concorrentes usando a FourA API.

O Que Você Vai Construir

Um script Python que:

  1. Busca páginas de produtos de uma lista de URLs de concorrentes
  2. Extrai dados de preços do HTML
  3. Registra os resultados em um arquivo CSV
  4. Executa de forma agendada

Pré-requisitos

  • Uma chave de API FourA (obtenha uma aqui)
  • Python 3.8+
  • Pacotes requests e beautifulsoup4
pip install requests beautifulsoup4

Passo 1: Defina Seus Alvos

Crie uma lista de URLs de produtos para monitorar:

targets = [
    {"name": "Competitor A - Widget", "url": "https://competitor-a.com/widget", "selector": ".price"},
    {"name": "Competitor B - Widget", "url": "https://competitor-b.com/products/widget", "selector": "[data-price]"},
    {"name": "Competitor C - Widget", "url": "https://competitor-c.com/item/123", "selector": ".product-price span"},
]

Passo 2: Buscar Páginas via FourA

import requests
import time

SINGLE_URL = "https://eu.api.foura.ai/api/single/"
BROWSER_URL = "https://eu.api.foura.ai/api/browser/"
API_KEY = "YOUR_API_KEY"

HEADERS = {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json"
}

def fetch_page(url, use_browser=False):
    if use_browser:
        resp = requests.post(BROWSER_URL, headers=HEADERS, json={
            "url": url,
            "timeout_ms": 15000
        })
        if resp.status_code == 429:
            time.sleep(5)
            return fetch_page(url, use_browser)
        return resp.json().get("body", "")
    else:
        resp = requests.post(SINGLE_URL, headers=HEADERS, json={
            "method": "GET",
            "url": url,
            "unblocker": True
        })
        if resp.status_code == 429:
            time.sleep(5)
            return fetch_page(url, use_browser)
        return resp.json().get("data", "")

Passo 3: Extrair Preços

from bs4 import BeautifulSoup
import re

def extract_price(html, selector):
    soup = BeautifulSoup(html, "html.parser")
    element = soup.select_one(selector)
    if not element:
        return None
    # Extract numeric price from text like "$49.99" or "49,99 EUR"
    text = element.get_text(strip=True)
    match = re.search(r'[\d,.]+', text)
    return float(match.group().replace(',', '.')) if match else None

Passo 4: Executar e Registrar Resultados

import csv
from datetime import datetime

def monitor_prices():
    timestamp = datetime.now().isoformat()
    results = []

    for target in targets:
        html = fetch_page(target["url"])
        price = extract_price(html, target["selector"])
        results.append({
            "timestamp": timestamp,
            "name": target["name"],
            "url": target["url"],
            "price": price
        })
        print(f"{target['name']}: {price}")
        time.sleep(1)  # Be polite

    # Append to CSV
    with open("prices.csv", "a", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["timestamp", "name", "url", "price"])
        if f.tell() == 0:
            writer.writeheader()
        writer.writerows(results)

if __name__ == "__main__":
    monitor_prices()

Passo 5: Agendar a Execução

Execute o script de hora em hora com o cron:

crontab -e
# Add this line:
0 * * * * cd /path/to/project && python3 monitor.py >> monitor.log 2>&1

Dicas

  • Comece com o single endpoint, mude para o browser se as páginas usarem renderização JavaScript
  • Adicione tratamento de erros: sites mudam de layout. Registre as falhas separadamente.
  • Mantenha os seletores atualizados: quando um concorrente redesenhar o site, atualize o seletor CSS
  • Respeite os sites: espace os requests, evite horários de pico, siga o robots.txt

Próximos Passos

Atualizado em: 27 de abril de 2026