Divida o catálogo por loja
Cada loja ganha sua própria fila de requisições e sua parte da lista de proxies. Os grandes marketplaces ficam com a maior parte.
As lojas mostram preços diferentes para cada região e bloqueiam quem pergunta demais do mesmo endereço. Um monitor de preços na Advanced.name espalha as requisições por dezenas de milhares de endereços IPv4 e consulta cada loja a partir da região dos seus compradores.
Um monitor visita as mesmas páginas toda hora. É esse padrão que leva bloqueio, e o pool tem que escondê-lo.
Um IP diferente a cada visita ao mesmo produto
O pacote nº 4 tem 30.000 endereços: a página do produto vê o mesmo IP uma vez por mês
Preços como os compradores locais veem
Pools Europa, CEI e China; World MIX para os EUA e outros mercados
Milhares de SKUs checados a cada hora
Até 2.500 threads no pacote nº 4 e 5.000 no nº 6
Páginas com imagens e scripts, não só JSON
Tráfego sem limite: baixe páginas inteiras com a frequência que a agenda pedir
Dez mil SKUs por hora cabem no pacote nº 3; acompanhar um marketplace inteiro pede o nº 4 ou maior.
Cada loja ganha sua própria fila de requisições e sua parte da lista de proxies. Os grandes marketplaces ficam com a maior parte.
Pegue o próximo endereço a cada requisição, tente de novo duas vezes por outro e registre o preço junto com o IP que o trouxe.
Os endereços saem do pool quando envelhecem. O link sempre devolve o conjunto atual, então releia com um timer.
Preencha products.txt com URLs de produtos e defina COUNTRY. Cada produto é baixado pelo próximo proxy, o preço é extraído e gravado em prices.csv. Ajuste PRICE_RE à marcação da loja. Teste antes na lista de proxies grátis.
#!/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()
Baixe cada página de produto pelo próximo proxy e tire o preço do bloco JSON-LD ou do nó de preço; o script acima usa uma regex que você ajusta para cada loja. Envie o Accept-Language e o cookie de moeda da região com o IP local, senão a loja pode jogar você para outro mercado.
Agende pela pressão: estoque toda hora, preços duas vezes por dia. Guarde o status HTTP com cada preço, assim uma rajada de 403 numa loja avisa para desacelerar ali, e não em todas.
Serviços de acompanhamento de preços e scrapers sem código (Octoparse, Web Scraper) aceitam uma lista de proxies nas configurações: cole o mesmo arquivo ip:port. Até o IMPORTXML do Google Sheets pode rodar atrás de um pequeno relay de proxies para checagens leves.
Mantenha o pool atualizado com o verificador de proxies e teste o fluxo na lista de proxies grátis antes de escalar para o catálogo inteiro.



Percorrer o catálogo de hora em hora compensa num pacote ilimitado. Lojas bem protegidas e preços por cidade pedem endereços residenciais.
Catálogo de hora em horaMelhor escolha
Com checagens de hora em hora, uma página de produto vê o mesmo IP mais ou menos uma vez por mês. Páginas completas não aumentam a conta.
$990 por mêsou $4.20 por hora
Lojas rigorosas
Um IP residencial do país da loja a cada requisição. Para sites que mostram captcha em vez do preço aos endereços de listas.
a partir de $0.49 por GB1 GB por $0.85
Preços por cidade
Cidade e região na string de conexão. A loja mostra o preço e a entrega que um comprador daquela cidade vê.
a partir de $1.39 por GB1 GB por $2.29
Escolha o pacote, use a hora grátis e passe o monitor pelo catálogo inteiro.