Увійти Реєстрація
Моніторинг цін

Проксі для моніторингу цін, яких магазини не помічають

Магазини показують різним регіонам різні ціни і блокують тих, хто надто часто питає з однієї адреси. Трекер цін на Advanced.name розкидає запити по десятках тисяч IPv4-адрес і питає кожен магазин з регіону його покупців.

  • 30 000 IP на пакеті №4
  • ціни з регіону покупця
  • оновлення списку кожні 10 хвилин
Прохід складу з планшетом, на якому графік цін
Моніторинг цін

Що потрібно трекеру цін і що дає пакет

Трекер щогодини заходить на ті самі сторінки. Саме цей патерн і блокують, і пул має його сховати.

Що потрібно задачіЩо дає пакет

Інший IP на кожен візит до того самого товару

У пакеті №4 30 000 адрес: картка товару бачить той самий IP раз на місяць

Ціни такими, як їх бачать місцеві покупці

Пули Європа, СНД і Китай; Мікс світу для США та інших ринків

Тисячі SKU щогодини

До 2500 потоків на пакеті №4, 5000 на пакеті №6

Сторінки з картинками і скриптами, а не лише JSON

Ліміту трафіку немає: завантажуйте повні сторінки так часто, як каже розклад

Безлімітні проксі

Виберіть пакет під розмір каталогу

Десять тисяч SKU на годину вміщаються в пакет №3; для нагляду за цілим маркетплейсом потрібен №4 або більший.

Регіон
Строк
Авторизовані IP
1 +10% за кожну IP після першої
Рекомендуємо для цієї задачі
$0
  • Проксі в пакеті
  • Потоки
  • Авторизовані IP1
  • ПротоколиHTTP / SOCKS5
Усі 13 пакетів у таблиці цін

Три кроки до першого зрізу цін

Розділіть каталог за магазинами

Кожен магазин отримує свою чергу запитів і свою частку списку проксі. Великим маркетплейсам дістається найбільша частка.

Ротація і повтори

Беріть наступну адресу на кожен запит, повторюйте двічі з іншої, записуйте ціну разом з IP, через який її отримали.

Оновлюйте список кожні 10 хвилин

Адреси старіють і йдуть з пулу. Посилання завжди віддає актуальний набір, тож перечитуйте його за таймером.

Готовий монітор цін: один запит на товар, з ротацією

Заповніть products.txt посиланнями на товари і задайте COUNTRY. Кожен товар завантажується через наступний проксі, ціна витягується і пишеться в prices.csv. Підлаштуйте PRICE_RE під розмітку магазину. Спершу спробуйте на безкоштовному списку проксі.

CSV export link from your dashboard
buyers' country: prices are read as local shoppers see them
one product URL per line
regex, group 1 = the price
url;price;proxy;country is written here
Значення беруться з форми; скопіюйте або завантажте готовий файл.
Показати код скрипта
Python 3.8+ · prices.py
#!/usr/bin/env python3
"""Price monitor for Advanced.name proxies.

Fetches product pages through proxies from the buyer's country and pulls the
price out of each page. One request per product goes through the next proxy, so
a shop sees the same address rarely. Standard library only. python3 prices.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # buyers' country: prices are read as local shoppers see them
MIN_SPEED = 3
PRODUCTS_FILE = "products.txt"           # one product URL per line
PRICE_RE = r'"price"\s*:\s*"?([0-9][0-9.,]*)'   # regex, group 1 = the price
OUT_FILE = "prices.csv"                   # url;price;proxy;country is written here
THREADS = 40
TIMEOUT = 20
RETRIES = 3
# ============================================================================

import csv
import io
import itertools
import re
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed

COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED = 0, 1, 2, 3
UA = "Mozilla/5.0 (compatible; price-monitor/1.0)"
PRICE = re.compile(PRICE_RE)


def load_proxies():
    raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
    pool = []
    for row in csv.reader(io.StringIO(raw), delimiter=";"):
        if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
            continue
        if COUNTRY and row[COL_COUNTRY].strip().upper() != COUNTRY.upper():
            continue
        if int(row[COL_SPEED] or 0) < MIN_SPEED:
            continue
        pool.append(row[COL_IP].strip() + ":" + row[COL_PORT].strip())
    return pool


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies for COUNTRY=%r." % COUNTRY)
    with open(PRODUCTS_FILE, encoding="utf-8") as fh:
        products = [line.strip() for line in fh if line.strip() and not line.startswith("#")]
    print("proxies: %d (%s), products: %d" % (len(proxies), COUNTRY, len(products)))

    rotation = itertools.cycle(proxies)
    lock = threading.Lock()

    def grab(url):
        for _ in range(RETRIES):
            with lock:
                proxy = next(rotation)
            handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
            req = urllib.request.Request(url, headers={
                "User-Agent": UA, "Accept-Language": COUNTRY.lower() + "," + COUNTRY.upper()})
            try:
                html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
            except Exception:
                continue
            match = PRICE.search(html)
            return (match.group(1) if match else "not found"), proxy
        return "unreachable", ""

    rows = []
    with ThreadPoolExecutor(max_workers=THREADS) as pool:
        futures = {pool.submit(grab, u): u for u in products}
        for fut in as_completed(futures):
            url = futures[fut]
            price, proxy = fut.result()
            rows.append((url, price, proxy, COUNTRY))
            print("%-9s %s" % (price, url[:60]))

    with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
        writer = csv.writer(out, delimiter=";")
        writer.writerow(["url", "price", "proxy", "country"])
        writer.writerows(rows)
    print("written %s (%d rows)" % (OUT_FILE, len(rows)))


if __name__ == "__main__":
    main()
Налаштування

Як налаштувати трекер цін

Власний парсер

Завантажуйте кожну сторінку товару через наступний проксі і беріть ціну з блоку JSON-LD або з вузла ціни; скрипт вище використовує регулярний вираз, який ви налаштовуєте під кожен магазин. Разом з місцевим IP надсилайте Accept-Language і куку валюти регіону, інакше магазин може перекинути вас на інший ринок.

Розклад за навантаженням: наявність щогодини, ціни двічі на день. Зберігайте HTTP-статус разом з кожною ціною, тоді сплеск 403 від одного магазину підкаже пригальмувати саме там, а не скрізь.

Готові інструменти й таблиці

Сервіси стеження за цінами і no-code парсери (Octoparse, Web Scraper) приймають список проксі в налаштуваннях: вставте той самий файл ip:port. Навіть IMPORTXML у Google Sheets може працювати через невеликий проксі-ретранслятор для легких перевірок.

Тримайте пул свіжим за допомогою чекера проксі і перевірте всю схему на безкоштовному списку проксі, перш ніж масштабуватися на повний каталог.

На практиці

Що бачить трекер

Чотири правила чистих даних про ціни

  1. Надсилайте разом з регіональним IP заголовок Accept-Language і куки валюти цього регіону, інакше магазин усе одно може вас перенаправити.
  2. Стежте за кешованими й персоналізованими цінами: два IP з однієї країни мають повертати однакове число.
  3. Зберігайте HTTP-статус разом з кожною ціною. Сплеск 403 від одного магазину означає «пригальмуй тут», а не скрізь.
  4. Тримайте невеликий запас потоків для повторних перевірок товарів, ціна яких стрибнула більш ніж на 20%.

Тарифи за ГБ під цю задачу

Ця задача за країнами

Показати всі країни
FAQ

Питання про цю задачу

Як часто можна перевіряти один товар?
Щогодини безпечно на пакеті №4: з 30 000 адрес картка товару зустрічає той самий IP приблизно раз на місяць.
Чи побачу я місцеві ціни?
Так, якщо IP з регіону магазину, а запит несе заголовки мови і валюти цього регіону.
А як із маркетплейсами, де багато JavaScript?
Трафік не рахується, тож headless-браузер через проксі цілком годиться. Дайте йому тайм-аут 15–20 секунд і свіжий IP на кожну сесію.
Можна спершу спробувати на своєму каталозі?
Одна тестова година на будь-якому пакеті безкоштовна, з повною кількістю потоків. Запустіть трекер на годину і порівняйте частку помилок.
Як зняти ціни за містами?
Через Resi Prime: місто задається в рядку підключення, і магазин віддає місцеву ціну й строк доставки. Безлімітні пакети й Resi Core дають точність до країни.
Тарифи під задачу

Що взяти під моніторинг цін

Щогодинний обхід каталогу вигідніший на безлімітному пакеті. Магазинам із суворим захистом і цінам за містами потрібні резидентні адреси.

Безлімітні проксі

Каталог щогодиниНайкращий вибір

Пакет № 4 · Мікс світу · 30 000 IP · 2 500 потоків

Картка товару зустрічає ту саму IP приблизно раз на місяць за щогодинної перевірки. Повні сторінки не збільшують рахунок.

$990 на місяцьабо $4.20 за годину

Resi Core

Суворі магазини

2 млн+ IP · 200+ країн · потоки без ліміту

Домашня IP країни магазину на кожен запит. Для майданчиків, які показують адресам зі списків капчу замість ціни.

від $0.49 за ГБ1 ГБ за $0.85

Resi Prime

Ціни за містами

30 млн+ IP · 220 країн · потоки без ліміту

Місто й регіон у рядку підключення. Магазин показує ціну й доставку, які бачить покупець цього міста.

від $1.39 за ГБ1 ГБ за $2.29

Отримайте сьогоднішні ціни з кожного магазину

Виберіть пакет, візьміть безкоштовну годину і проженіть трекер по всьому каталогу.

Тарифи Взяти годину безкоштовно