تسجيل الدخول إنشاء حساب
سحب البيانات

بروكسي لسحب بيانات الويب يصمد أمام موجات الحظر المتكررة

تحتاج أداة السحب إلى عناوين كثيرة وتناوب سريع ولا عدّاد للحركة. تمنحك باقة واحدة من 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 التي تضيفها في لوحة التحكم. لا اسم مستخدم ولا كلمة مرور في إعدادات أداة السحب: العنوان هو المفتاح.

نفّذ التناوب في الكود

حمّل القائمة وامشِ عليها في دائرة، وإذا فشل طلب فأعد الرابط عبر البروكسي التالي. السكربت أدناه يفعل ذلك بالضبط باستخدام المكتبة القياسية.

أداة سحب جاهزة: تناوب وإعادة محاولة وتصفية حسب الدولة

وجّه CSV_URL إلى ملف التصدير من لوحة التحكم، واضبط COUNTRY وMIN_SPEED، وضع الروابط المستهدفة في urls.txt. يُبقي السكربت الدولة التي تحتاجها فقط، ويجلب كل رابط عبر البروكسي التالي، ويعيد المحاولة من عنوان آخر عند الفشل. افحص المجموعة أولًا بـ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 من جهة البروكسي.

اقرأ القائمة مرة واحدة وامشِ عليها في دائرة وخذ العنوان التالي مع كل طلب. أعد الرابط الفاشل عبر بروكسي آخر مرتين أو ثلاثًا قبل أن تتخلى عنه؛ السكربت أعلاه يفعل ذلك بالفعل.

‏Scrapy وOctoparse وأدوات الزحف الجاهزة

في Scrapy ضع العنوان في request.meta['proxy'] أو استخدم middleware لتدوير البروكسي موجّهًا إلى الملف الذي يكتبه المولّد، وأبقِ CONCURRENT_REQUESTS عند حد خيوط باقتك أو أقل. أدوات الزحف المرئية مثل Octoparse وParseHub تقبل قائمة ip:port نفسها في إعدادات البروكسي.

قبل زحف طويل، صفِّ المجموعة مرة واحدة بـSocks List Processor حتى لا تصل العناوين الميتة إلى المحلل. لتجربة سريعة للكود تكفي قائمة البروكسي المجانية.

في الواقع العملي

أين تعيش المجموعة

أربع عادات تبقي الزحف حيًا

  1. حدّث القائمة كل 10 دقائق واحذف العناوين التي اختفت منها: أُخرجت من التناوب لسبب.
  2. أبقِ IP واحدًا على موقع واحد لبضعة طلبات ثم انتقل. دورة على 20,000 عنوان تمنح كل IP راحة طويلة.
  3. اضبط مهلة من 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

المواقع المحمية

أكثر من 2 مليون IP · أكثر من 200 دولة · بلا حد للخيوط

عنوان IP منزلي جديد مع كل طلب. خذه للمواقع التي تصطدم فيها عناوين الباقات برمز التحقق. والدولة تحددها في سلسلة الاتصال.

من $0.49 للغيغابايت1 غيغابايت بسعر $0.85

Resi Prime

بيانات على مستوى المدينة

أكثر من 30 مليون IP · 220 دولة · بلا حد للخيوط

المدينة والمنطقة والمزوّد وASN في سلسلة الاتصال. تحتاجه عندما يعرض الموقع بيانات مختلفة لمدن مختلفة.

من $1.39 للغيغابايت1 غيغابايت بسعر $2.29

ابدأ الزحف خلال ساعة

اختر باقة، وخذ ساعة التجربة المجانية، وشغّل أداة السحب على المجموعة الحقيقية.

الأسعار جرّب ساعة مجانًا