כניסה הרשמה
גריפת נתונים

פרוקסי לגריפת אתרים ששורדים את גל החסימות בלי להיתקע

סורק צריך הרבה כתובות, החלפה מהירה ובלי מונה תעבורה. חבילה אחת של Advanced.name נותנת בין 5,000 ל-50,000 כתובות IPv4 בקישור אחד, עד 5,000 חיבורים במקביל ומאגר שבו בערך שליש מהכתובות מתחלף כל יום.

  • עד 50,000 IP בחבילה
  • עד 5,000 חיבורים
  • התעבורה לא נספרת
ארונות שרתים עם נורות חיווי בצבע טורקיז: מאגר הפרוקסי לגריפת אתרים
גריפת נתונים

מה סורק צריך ומה החבילה נותנת

ארבעה דברים קובעים אם סריקה תגיע לסוף או תמות בקאפצ'ה הראשונה.

מה המשימה צריכהמה החבילה נותנת

מספיק כתובות כדי ש-IP אחד לא יפנה לאתר פעמיים בדקה

מ-5,000 (חבילה מס' 1) עד 50,000 (חבילה מס' 6) כתובות ברשימה אחת

מאגר טרי: כתובות חסומות צריכות לצאת לפני שתגיעו אליהן

בערך שליש מהמאגר מתחלף כל 24 שעות, והרשימה מתרעננת כל 10 דקות

חיבורים מקבילים לכל הסריקה

בין 500 ל-5,000 חיבורים לפי החבילה, כל הפרוטוקולים על פורט אחד

אף אחד לא סופר גיגה-בייטים

אין מגבלת תעבורה באף חבילה ללא הגבלה: משלמים על החבילה ועל החיבורים

פרוקסי ללא הגבלה

בחרו חבילה לפי גודל הסריקה

אזור, חבילה, תקופה. המחיר הוא ל-IP מורשה אחד; כל IP נוסף מוסיף 10%.

אזור
תקופה
כתובות IP מורשות
1 ‎+10% לכל IP אחרי הראשון
מומלץ למשימה הזו
$0
  • פרוקסי בחבילה
  • חיבורים
  • כתובות IP מורשות1
  • פרוטוקוליםHTTP / SOCKS5
כל 13 החבילות בטבלת המחירים

שלושה צעדים מהתשלום לעמוד הראשון

קבלו את קישור הרשימה

אחרי התשלום מופיע בפאנל קישור כמו get.advanced.name/<ID>. הוא מחזיר שורות ip:port, שורה לכל כתובת. ‏HTTP ו-SOCKS5 יושבים על אותו פורט.

אשרו את ה-IP של השרת שלכם

הרשימה נפתחת רק מכתובות IP שהוספתם בפאנל. בלי שם משתמש וסיסמה בהגדרות הסורק: הכתובת היא המפתח.

החלפה בקוד

טענו את הרשימה, עברו עליה במעגל, ואם בקשה נכשלה, נסו שוב את ה-URL דרך הפרוקסי הבא. הסקריפט למטה עושה בדיוק את זה עם הספרייה הסטנדרטית.

סורק מוכן: החלפה, ניסיונות חוזרים, סינון לפי מדינה

כוונו את CSV_URL לייצוא מהפאנל, הגדירו COUNTRY ו-MIN_SPEED ושימו את כתובות היעד ב-urls.txt. הסקריפט משאיר רק את המדינה שצריך, מוריד כל URL דרך הפרוקסי הבא ומנסה שוב מכתובת אחרת כשאחת נכשלת. בדקו קודם את המאגר ב-Socks List Processor.

CSV export link from your dashboard
ISO 3166-1 alpha-2 (e.g. DE, NL, US), or "" for the whole pool
keep proxies with speed >= this value (higher is better)
parallel requests
seconds per request
proxies to try before a URL is marked failed
one target URL per line
fetched HTML is written here as 1.html, 2.html, ...
הערכים מגיעים מהטופס; העתיקו או הורידו את הקובץ המוכן.
הצג את קוד הסקריפט
Python 3.8+ · parsing.py
#!/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()
הגדרה

לחבר את המאגר לסורק שלכם

‏requests ו-urllib

העבירו את הפרוקסי בכל בקשה: בנו 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, ‏Octoparse וסורקים מוכנים

ב-Scrapy שימו את הכתובת ב-request.meta['proxy'] או השתמשו ב-middleware להחלפת פרוקסי שמכוון לקובץ שהמחולל כותב, ושמרו את CONCURRENT_REQUESTS במגבלת החיבורים של החבילה או מתחתיה. סורקים ויזואליים כמו Octoparse ו-ParseHub מקבלים את אותה רשימת ip:port בהגדרות הפרוקסי.

לפני סריקה ארוכה סננו את המאגר פעם אחת ב-Socks List Processor, כדי שכתובות מתות לא יגיעו למפענח. לבדיקה מהירה של הקוד מספיקה רשימת הפרוקסי החינמית.

בפועל

איפה המאגר נמצא

ארבעה הרגלים ששומרים על הסריקה בחיים

  1. רעננו את הרשימה כל 10 דקות והוציאו כתובות שנעלמו ממנה: הן יצאו מהסבב מסיבה טובה.
  2. השאירו IP אחד על אתר אחד לכמה בקשות ואז עברו הלאה. סבב על 20,000 כתובות נותן לכל IP מנוחה ארוכה.
  3. קבעו timeout של 10 עד 15 שניות ונסו שוב דרך הפרוקסי הבא במקום לחכות.
  4. התאימו את האזור לאתר: חנויות אירופיות דרך אירופה, לוחות מודעות רוסיים דרך חבר העמים, מרקטפלייסים סיניים דרך סין.

המשימה הזו לפי מדינה

הצגת כל המדינות
FAQ

שאלות על המשימה הזו

כמה חיבורים מקבל סורק?
כמה שהחבילה מאפשרת: 500 בחבילה #1, ‏5000 בחבילה #6. ל-Resi Core ול-Resi Prime אין מגבלת חיבורים. חיבור אחד הוא חיבור פתוח אחד למאגר.
הפרוקסי מתחלפים לבד?
הרשימה מתחלפת: בערך שליש מהכתובות משתנה כל יום. בתוך הקוד אתם בוחרים את הכתובת הבאה בעצמכם, כך שהקצב בשליטתכם.
‏HTTP או SOCKS5 לגריפה?
כל אחד מהם. שני הפרוטוקולים עונים על אותו פורט, אז בחרו במה שהספרייה שלכם תומכת. עם urllib ו-curl ‏HTTP הוא הדרך הקצרה.
אפשר לבדוק לפני תשלום?
כן. שעה חינם בכל חבילה, עם כל החיבורים ובלי כרטיס אשראי. מספיק כדי להריץ סריקה אמיתית ולראות את שיעור השגיאות.
מתי סורק צריך Resi במקום חבילה?
כשאתר חוסם כתובות מרשימות משותפות מהר יותר ממה שאתם עוברים עליהן. Resi Core נותן IP ביתי בכל בקשה, ו-Resi Prime מוסיף בחירת עיר. שאר הסריקה עולה פחות בחבילה, שבה התעבורה לא נספרת.
תוכניות למשימה הזו

מה לקחת לגרידת נתונים מהרשת

סריקה בנפח גדול עולה פחות בחבילה ללא הגבלה. עברו אתרים שחוסמים כתובות מרשימות עם Resi Core, ואספו נתונים לפי עיר עם Resi Prime.

פרוקסי ללא הגבלה

סריקה בנפח גדולההתאמה הטובה ביותר

חבילה #3 · מיקס עולמי · 20,000 IP · 2000 חיבורים

התעבורה לא נספרת: ג'יגה-בייטים של HTML ותמונות לא משנים את המחיר. שליש מהכתובות מתחלף כל יום, והחסומות יוצאות מהרשימה.

$700 לחודשאו $2.70 לשעה

Resi Core

אתרים מוגנים

2M+ כתובות IP · 200+ מדינות · בלי מגבלת חיבורים

IP ביתי חדש בכל בקשה. קחו אותו לאתרים שבהם כתובות של חבילות נתקלות בקפצ'ה. את המדינה קובעים במחרוזת החיבור.

החל מ- $0.49 ל-GB1 GB ב-$0.85

Resi Prime

נתונים ברמת עיר

30M+ כתובות IP · 220 מדינות · בלי מגבלת חיבורים

עיר, אזור, ספק ו-ASN במחרוזת החיבור. צריך את זה כשאתר מציג נתונים שונים לערים שונות.

החל מ- $1.39 ל-GB1 GB ב-$2.29

התחילו את הסריקה תוך שעה

בחרו חבילה, קחו את שעת הניסיון החינמית והריצו את הסורק על המאגר האמיתי.

מחירים שעה חינם לניסיון