Kataloğu mağazalara bölün
Her mağaza kendi istek kuyruğunu ve proxy listesinden kendi payını alır. Büyük pazar yerleri en büyük payı alır.
Mağazalar farklı bölgelere farklı fiyat gösterir ve tek adresten çok sık soranı engeller. Advanced.name üzerindeki bir fiyat izleyici isteklerini on binlerce IPv4 adresine dağıtır ve her mağazaya alıcılarının bölgesinden sorar.
İzleyici her saat aynı sayfaları ziyaret eder. Engellenen tam da bu kalıptır ve havuzun onu gizlemesi gerekir.
Aynı ürüne her ziyarette farklı bir IP
4 numaralı pakette 30.000 adres var: bir ürün sayfası aynı IP'yi ayda bir görür
Yerel alıcıların gördüğü fiyatlar
Avrupa, BDT ve Çin havuzları; ABD ve diğer pazarlar için World MIX
Her saat binlerce ürün kodu kontrolü
4 numaralı pakette 2.500'e, 6 numaralı pakette 5.000'e kadar thread
Yalnızca JSON değil, görsel ve betikli sayfalar
Trafik sınırı yok: tam sayfaları program ne kadar sık istiyorsa o kadar çekin
Saatte on bin ürün kodu 3 numaralı pakete sığar; bütün bir pazar yerini izlemek için 4 numara ya da daha büyüğü gerekir.
Her mağaza kendi istek kuyruğunu ve proxy listesinden kendi payını alır. Büyük pazar yerleri en büyük payı alır.
Her istek için sıradaki adresi alın, başka bir adresle iki kez tekrar deneyin, fiyatı onu getiren IP ile birlikte kaydedin.
Adresler eskidikçe havuzdan çıkar. Bağlantı her zaman güncel kümeyi döndürür, bu yüzden onu bir zamanlayıcıyla yeniden okuyun.
products.txt dosyasını ürün URL'leriyle doldurun ve COUNTRY değerini girin. Her ürün sıradaki proxy ile çekilir, fiyat ayıklanır ve prices.csv dosyasına yazılır. PRICE_RE'yi mağazanın işaretlemesine göre ayarlayın. Önce ücretsiz proxy listesinde deneyin.
#!/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()
Her ürün sayfasını sıradaki proxy ile çekin ve fiyatı JSON-LD bloğundan ya da fiyat düğümünden alın; yukarıdaki betik her mağazaya göre ayarladığınız bir regex kullanır. Yerel IP ile birlikte bölgenin Accept-Language başlığını ve para birimi çerezini gönderin, yoksa mağaza sizi başka bir pazara yönlendirebilir.
Zamanlamayı baskıya göre yapın: stok saatte bir, fiyatlar günde iki kez. Her fiyatla HTTP durum kodunu saklayın, böylece bir mağazadan gelen 403 dalgası her yerde değil orada yavaşlamanız gerektiğini söyler.
Fiyat takip servisleri ve kodsuz scraper'lar (Octoparse, Web Scraper) ayarlarda bir proxy listesi kabul eder: aynı ip:port dosyasını yapıştırın. Google Sheets'teki IMPORTXML bile hafif kontroller için küçük bir proxy aktarıcısının arkasında çalışabilir.
Havuzu proxy denetleyicisi ile taze tutun ve tam kataloğa geçmeden önce akışı ücretsiz proxy listesinde deneyin.



Kataloğu saatlik taramak sınırsız pakette kârlıdır. Sıkı korunan mağazalar ve şehir fiyatları konut adresleri ister.
Her saat katalogEn uygun seçim
Saatlik kontrollerde bir ürün kartı aynı IP'yi ayda yaklaşık bir kez görür. Tam sayfalar faturayı artırmaz.
$990 aylıkveya saatlik $4.20
Katı mağazalar
Her istekte mağazanın ülkesinden bir ev IP'si. Liste adreslerine fiyat yerine captcha gösteren siteler için.
başlangıç $0.49 GB başına1 GB: $0.85
Şehir fiyatları
Bağlantı dizesinde şehir ve bölge. Mağaza, o şehirdeki bir alıcının gördüğü fiyatı ve teslimatı gösterir.
başlangıç $1.39 GB başına1 GB: $2.29
Paketi seçin, ücretsiz saati alın, izleyiciyi tüm katalogda çalıştırın.