קבלו את קישור הרשימה
אחרי התשלום מופיע בפאנל קישור כמו get.advanced.name/<ID>. הוא מחזיר שורות ip:port, שורה לכל כתובת. HTTP ו-SOCKS5 יושבים על אותו פורט.
סורק צריך הרבה כתובות, החלפה מהירה ובלי מונה תעבורה. חבילה אחת של Advanced.name נותנת בין 5,000 ל-50,000 כתובות IPv4 בקישור אחד, עד 5,000 חיבורים במקביל ומאגר שבו בערך שליש מהכתובות מתחלף כל יום.
ארבעה דברים קובעים אם סריקה תגיע לסוף או תמות בקאפצ'ה הראשונה.
מספיק כתובות כדי ש-IP אחד לא יפנה לאתר פעמיים בדקה
מ-5,000 (חבילה מס' 1) עד 50,000 (חבילה מס' 6) כתובות ברשימה אחת
מאגר טרי: כתובות חסומות צריכות לצאת לפני שתגיעו אליהן
בערך שליש מהמאגר מתחלף כל 24 שעות, והרשימה מתרעננת כל 10 דקות
חיבורים מקבילים לכל הסריקה
בין 500 ל-5,000 חיבורים לפי החבילה, כל הפרוטוקולים על פורט אחד
אף אחד לא סופר גיגה-בייטים
אין מגבלת תעבורה באף חבילה ללא הגבלה: משלמים על החבילה ועל החיבורים
אזור, חבילה, תקופה. המחיר הוא ל-IP מורשה אחד; כל IP נוסף מוסיף 10%.
אחרי התשלום מופיע בפאנל קישור כמו get.advanced.name/<ID>. הוא מחזיר שורות ip:port, שורה לכל כתובת. HTTP ו-SOCKS5 יושבים על אותו פורט.
הרשימה נפתחת רק מכתובות IP שהוספתם בפאנל. בלי שם משתמש וסיסמה בהגדרות הסורק: הכתובת היא המפתח.
טענו את הרשימה, עברו עליה במעגל, ואם בקשה נכשלה, נסו שוב את ה-URL דרך הפרוקסי הבא. הסקריפט למטה עושה בדיוק את זה עם הספרייה הסטנדרטית.
כוונו את CSV_URL לייצוא מהפאנל, הגדירו COUNTRY ו-MIN_SPEED ושימו את כתובות היעד ב-urls.txt. הסקריפט משאיר רק את המדינה שצריך, מוריד כל URL דרך הפרוקסי הבא ומנסה שוב מכתובת אחרת כשאחת נכשלת. בדקו קודם את המאגר ב-Socks List Processor.
#!/usr/bin/env python3
"""Multithreaded scraper for Advanced.name proxies.
Reads the CSV proxy export, keeps the country and speed you need, then fetches a
list of target URLs through rotating proxies with automatic retries. Standard
library only, no pip. Edit the CONFIG block and run: python3 scrape.py
"""
# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv" # CSV export link from your dashboard
COUNTRY = "DE" # ISO 3166-1 alpha-2 (e.g. DE, NL, US), or "" for the whole pool
MIN_SPEED = 3 # keep proxies with speed >= this value (higher is better)
THREADS = 50 # parallel requests
TIMEOUT = 15 # seconds per request
RETRIES = 3 # proxies to try before a URL is marked failed
URLS_FILE = "urls.txt" # one target URL per line
OUT_DIR = "pages" # fetched HTML is written here as 1.html, 2.html, ...
# ============================================================================
import csv
import io
import itertools
import os
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed
# CSV columns from the dashboard export, ';' separated:
# ip ; port ; country ; speed ; uptime ; exit_ip
COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED, COL_UPTIME = 0, 1, 2, 3, 4
UA = "Mozilla/5.0 (compatible; scraper/1.0)"
def load_proxies():
"""Download the CSV list, keep the wanted country and speed, fastest first."""
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
country = row[COL_COUNTRY].strip().upper()
speed = int(row[COL_SPEED] or 0)
if COUNTRY and country != COUNTRY.upper():
continue
if speed < MIN_SPEED:
continue
pool.append((row[COL_IP].strip() + ":" + row[COL_PORT].strip(), speed))
pool.sort(key=lambda item: -item[1])
return [addr for addr, _ in pool]
def opener_for(proxy):
handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
return urllib.request.build_opener(handler)
def main():
proxies = load_proxies()
if not proxies:
sys.exit("No proxies match COUNTRY=%r and MIN_SPEED=%d." % (COUNTRY, MIN_SPEED))
with open(URLS_FILE, encoding="utf-8") as fh:
urls = [u for u in map(str.strip, fh) if u and not u.startswith("#")]
os.makedirs(OUT_DIR, exist_ok=True)
print("proxies: %d (%s), urls: %d, threads: %d" % (len(proxies), COUNTRY or "any", len(urls), THREADS))
rotation = itertools.cycle(proxies)
lock = threading.Lock()
done = {"ok": 0, "fail": 0}
def fetch(index, url):
for _ in range(RETRIES):
with lock:
proxy = next(rotation)
req = urllib.request.Request(url, headers={"User-Agent": UA})
try:
body = opener_for(proxy).open(req, timeout=TIMEOUT).read()
except Exception:
continue
with open(os.path.join(OUT_DIR, "%d.html" % index), "wb") as out:
out.write(body)
return True
return False
with ThreadPoolExecutor(max_workers=THREADS) as pool:
futures = {pool.submit(fetch, i, u): u for i, u in enumerate(urls, 1)}
for fut in as_completed(futures):
ok = fut.result()
with lock:
done["ok" if ok else "fail"] += 1
total = done["ok"] + done["fail"]
sys.stderr.write("\r%d/%d ok %d fail %d" % (total, len(urls), done["ok"], done["fail"]))
sys.stderr.flush()
print("\nsaved %d pages to %s/ (%d failed)" % (done["ok"], OUT_DIR, done["fail"]))
if __name__ == "__main__":
main()
העבירו את הפרוקסי בכל בקשה: בנו opener עם ProxyHandler, או תנו ל-requests את proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}. HTTP ו-SOCKS חולקים פורט, כך ש-http:// מכסה את שניהם; ל-SOCKS5 ב-requests התקינו requests[socks] והשתמשו ב-socks5h://ip:port כדי שה-DNS ייפתר בצד הפרוקסי.
קראו את הרשימה פעם אחת, עברו עליה במעגל וקחו את הכתובת הבאה בכל בקשה. URL שנכשל נסו שוב דרך פרוקסי אחר פעמיים-שלוש לפני שמוותרים; הסקריפט למעלה כבר עושה את זה.
ב-Scrapy שימו את הכתובת ב-request.meta['proxy'] או השתמשו ב-middleware להחלפת פרוקסי שמכוון לקובץ שהמחולל כותב, ושמרו את CONCURRENT_REQUESTS במגבלת החיבורים של החבילה או מתחתיה. סורקים ויזואליים כמו Octoparse ו-ParseHub מקבלים את אותה רשימת ip:port בהגדרות הפרוקסי.
לפני סריקה ארוכה סננו את המאגר פעם אחת ב-Socks List Processor, כדי שכתובות מתות לא יגיעו למפענח. לבדיקה מהירה של הקוד מספיקה רשימת הפרוקסי החינמית.


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