פצלו לפי מרקטפלייס ומדינה
רשימה אחת לכל שוק: השאירו את שורות ה-CSV של אותה מדינה ותנו לכל מפענח קובץ ip:port משלו.
מסחר מקוון חי על נתונים של אחרים: המלאי של המתחרים, המחירים שלהם, דפי המוצר שלהם כפי שקונים בכל מדינה רואים אותם. מרקטפלייסים חותכים כתובות מרשימות בחומרה רבה יותר מאתרים אחרים, ולכן הסריקה הראשית עוברת דרך Resi Core עם IP ביתי מהמדינה הנכונה, וחבילות ללא הגבלה מכסות חנויות פשוטות יותר ונפחים גדולים.
מרקטפלייסים הם האתרים המוגנים ביותר ברשת. המאגר צריך להיות גדול, מקומי וטרי.
דפי מוצר כפי שקונה מקומי רואה אותם
Resi Core: IP ביתי ממדינת השוק; Resi Prime מוסיף עיר ותאריך משלוח
בדיקות מלאי ומחיר על אלפי מק"טים
בלי מגבלת חיבורים ב-Resi, עד 2500 בחבילות
כתובות ששורדות חסימה של מרקטפלייס
במאגר Resi Core יש 2M+ כתובות, עם IP חדש בכל בקשה
עמודים מלאים עם תמונות וביקורות
התעבורה לא נספרת בחבילות ללא הגבלה; ב-Resi כבו תמונות ושלמו רק על ה-HTML
כבו תמונות וסקריפטים בסורק, והג'יגה-בייטים ילכו ל-HTML של דפי המוצר. המחיר ל-GB יורד עם גודל ההזמנה.
| גודל ההזמנה | Resi Core | Resi Prime |
|---|---|---|
| 1 GB ומעלה | $0.85 | $2.29 |
| 10 GB ומעלה | $0.79 | $2.09 |
| 50 GB ומעלה | $0.72 | $1.95 |
| 100 GB ומעלהחיסכון 24% | $0.65 | $1.75 |
| 500 GB ומעלה | $0.57 | $1.55 |
| 1000 GB ומעלה | $0.49 | $1.39 |
המחירים בדולרים אמריקאיים ל-1 GB. קונים ג'יגה-בייטים שלמים, החל מאחד.
מאגר
אתם חוסכים 24% ($20.00) לעומת המחיר של 1 GB ומעלה
הוסיפו 400 GB וכל ג'יגה-בייט יירד ל-$0.57
לקנות את הכמות הזואפשר להשתמש בג'יגה-בייטים 3 חודשים מתאריך הרכישה; מה שנשאר אחרי זה נמחק.
רשימה אחת לכל שוק: השאירו את שורות ה-CSV של אותה מדינה ותנו לכל מפענח קובץ ip:port משלו.
מלאי כל שעה, מחירים פעמיים ביום, דפי מוצר פעם ביום. כל בקשה מהכתובת הבאה ברשימה.
שמרו עם כל רשומה את המחיר, סימון המלאי, תאריך המשלוח ואת מדינת ה-IP: המדינה תסביר את ההבדלים בהמשך.
מלאו את products.txt והגדירו COUNTRY; כל מוצר נקרא דרך פרוקסי מקומי, המחיר וסימון המלאי נשלפים ומתווספים ל-stock.csv, וכך נבנית היסטוריה לגרף. התאימו את PRICE_RE ו-INSTOCK_RE למרקטפלייס.
#!/usr/bin/env python3
"""Marketplace stock and price watcher for Advanced.name proxies.
For each product URL it fetches the page through a proxy from the target country
and pulls both the price and an in-stock flag, writing a CSV you can chart over
time. Standard library only. Edit CONFIG and run: python3 stock.py
"""
# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv" # CSV export link from your dashboard
COUNTRY = "IT" # marketplace country
MIN_SPEED = 3
PRODUCTS_FILE = "products.txt" # one product URL per line
PRICE_RE = r'"price"\s*:\s*"?([0-9][0-9.,]*)' # group 1 = price
INSTOCK_RE = r'"availability"\s*:\s*"[^"]*InStock' # matches when in stock
OUT_FILE = "stock.csv" # url;price;in_stock;proxy is written here
THREADS = 40
TIMEOUT = 20
RETRIES = 3
# ============================================================================
import csv
import io
import itertools
import re
import sys
import threading
import time
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36"
PRICE = re.compile(PRICE_RE)
INSTOCK = re.compile(INSTOCK_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 watch(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()})
try:
html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
except Exception:
continue
price = PRICE.search(html)
return (price.group(1) if price else ""), ("yes" if INSTOCK.search(html) else "no"), proxy
return "", "unreachable", ""
rows = []
with ThreadPoolExecutor(max_workers=THREADS) as pool:
futures = {pool.submit(watch, u): u for u in products}
for fut in as_completed(futures):
url = futures[fut]
price, stock, proxy = fut.result()
rows.append((time.strftime("%Y-%m-%d %H:%M"), url, price, stock, proxy))
print("%-4s %-9s %s" % (stock, price, url[:56]))
header = not _exists(OUT_FILE)
with open(OUT_FILE, "a", encoding="utf-8", newline="") as out:
writer = csv.writer(out, delimiter=";")
if header:
writer.writerow(["checked_at", "url", "price", "in_stock", "proxy"])
writer.writerows(rows)
print("appended %d rows to %s" % (len(rows), OUT_FILE))
def _exists(path):
try:
open(path).close()
return True
except OSError:
return False
if __name__ == "__main__":
main()
בנו מייצוא ה-CSV רשימת ip:port נפרדת לכל מדינת מרקטפלייס ותנו לכל מפענח קובץ משלו. שלחו את עוגיית המדינה של המרקטפלייס עם ה-IP האזורי; חלק מהאתרים קוראים את האזור מעוגייה לפני הכתובת.
קחו את כמויות המלאי מדף המוצר או מהעגלה, לא מתוצאות חיפוש שנשמרות במטמון, והאטו לפי מרקטפלייס ולא באופן כללי כשמופיעים 403.
הריצו את המשגיח למעלה מ-cron והוסיפו הכול ל-CSV אחד, כדי שתיבנה היסטוריה לגרף. רשמו את מדינת ה-IP עם כל רשומה; המדינה היא שתסביר בהמשך הבדלים במחיר ובמשלוח.
שמרו על מאגר טרי עם Socks List Processor, ונסו את המפענח על רשימת הפרוקסי החינמית לפני הקטלוג המלא.



סרקו מרקטפלייסים גדולים דרך Resi Core, החזיקו את חשבון המוכר ואת המחירים לפי עיר על Resi Prime, ואספו חנויות פשוטות יותר בחבילה ללא הגבלה בפחות כסף.
סריקת מרקטפלייסיםההתאמה הטובה ביותר
IP ביתי ממדינת השוק בכל בקשה, כך שכתובת חסומה אחת לא עוצרת את הסריקה. את הג'יגה-בייטים שקניתם מנצלים לאורך שלושה חודשים.
החל מ- $0.49 ל-GB1 GB ב-$0.85
חשבון מוכר ועיר
חשבון מוכר נשאר על IP ביתי אחד עד 24 שעות. העיר והספק במחרוזת מראים את המחיר ואת תאריך המשלוח שקונה בעיר הזו רואה.
החל מ- $1.39 ל-GB1 GB ב-$2.29
חנויות פשוטות ונפח
התעבורה לא נספרת, אז דפי מוצר מלאים עם תמונות לא מעלים את החשבון. מתאים לחנויות שלא חותכות כתובות מרשימות.
$397 לחודשאו $2.20 לשעה
קחו Resi Core למרקטפלייסים, בדקו את הסורק על 1 GB והריצו את המעקב בכל שוק שבו אתם מוכרים.