In this Article
يعني تعلّم تجريف صفحات الويب الديناميكية التعامل مع محتوى لا يوجد في HTML الذي ينزّله طلبك الأول. تبني المواقع الحديثة شبكات المنتجات والأسعار والتعليقات والخلاصات داخل المتصفح باستخدام JavaScript، لذلك يعيد جلب HTTP عادي هيكلًا فارغًا في الموضع الذي ينبغي أن تكون فيه البيانات.
يشرح هذا الدليل سير العمل كاملًا في Python. يبدأ بكشف المحتوى الديناميكي عبر مقارنة الاستجابة الخام بـ DOM المعروض، ثم يرتّب خيارات الاستخراج من الأقل كلفة إلى الأثقل: العثور على JSON API المخفية، وتشغيل Playwright أو Selenium، ومعالجة التمرير اللانهائي وأزرار تحميل المزيد، وخفض النطاق الترددي للبروكسي، وإضافة إعادة المحاولة، والتجريف المتزامن، وتصدير JSON وCSV منظّفين.
DataImpulse مزود بروكسيات أخلاقي يوفّر أكثر من 90 مليون عنوان IP سكني ومحمول ومن مراكز البيانات عبر 195 دولة. يستخدم نموذج الدفع حسب الاستخدام بدءًا من 1 دولار لكل GB مع حركة مرور لا تنتهي صلاحيتها، ويُستخدم لتجريف الويب والتحقق من الإعلانات ومراقبة الأسعار وأبحاث السوق وإدارة الحسابات المتعددة.
حقائق أساسية
- التجريف الديناميكي: المحتوى الذي تبنيه JavaScript غير موجود في HTML الخام، لذا إما أن تستدعي JSON API الأساسية التي تجلبها الصفحة، أو تعرض الصفحة في متصفح بلا واجهة.
- أفضل نوع بروكسي: بروكسيات سكنية متناوبة تستخدم عناوين IP حقيقية للمستهلكين وتتجاوز الكشف.
- السعر: بدءًا من 1 دولار لكل GB، مع الدفع حسب الاستخدام وحركة مرور لا تنتهي صلاحيتها ومن دون اشتراك.
- التغطية: أكثر من 90 مليون عنوان IP من مصادر أخلاقية عبر 195 دولة.
- الموثوقية: معدل نجاح 99.51%، وتقييم 4.8 من 5 على G2.
- البروتوكولات والاستهداف: HTTP وHTTPS وSOCKS5، مع تضمين الاستهداف حسب الدولة.

ما الذي يجعل صفحة الويب ديناميكية؟
تكون الصفحة ديناميكية عندما يُنشأ المحتوى المهم بواسطة JavaScript في المتصفح بدلًا من تقديمه في استجابة HTML الأولية. يرسل الخادم هيكلًا خفيفًا، ثم يجلب كود جانب العميل البيانات ويحقنها في DOM بعد فتح الصفحة.
أسرع فحص يدوي هو مقارنة عرضين للصفحة نفسها. انقر بزر الفأرة الأيمن واختر عرض المصدر لرؤية HTML الخام الذي أعاده الخادم، ثم افتح أدوات المطور وافحص لوحة العناصر التي تعرض DOM الحي بعد تشغيل البرامج النصية. إذا ظهر السعر أو الإعلان الذي تريده في لوحة العناصر وغاب عن عرض المصدر، فالمحتوى ديناميكي ولن يلتقطه طلب واحد.
- المحتوى الثابت يظهر في عرض المصدر ويمكن تحليله مباشرة من استجابة HTTP.
- المحتوى الديناميكي يظهر فقط في DOM المعروض ويُحمّل عبر طلبات في الخلفية.
يمكنك أتمتة هذا التشخيص في الشفرة. احسب أولًا العناصر المستهدفة في HTML الخام الذي ينزّله عميل HTTP عادي:
import requests
from bs4 import BeautifulSoup
url = "https://example.com/products"
headers = {"User-Agent": "Mozilla/5.0"}
resp = requests.get(url, headers=headers, timeout=30)
soup = BeautifulSoup(resp.text, "html.parser")
raw_cards = soup.select("div.product-card")
print("Cards in raw HTML:", len(raw_cards))
# If this prints 0 but the page clearly shows products in a browser,
# the content is injected by JavaScript and the page is dynamic.
بعد ذلك، اعرض URL نفسه في متصفح بلا واجهة واحسب من جديد. الفرق بين الرقمين هو الدليل:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com/products", wait_until="networkidle")
rendered_cards = page.query_selector_all("div.product-card")
print("Cards after JavaScript runs:", len(rendered_cards))
browser.close()
# Raw HTML 0, rendered DOM 48 means the page builds its content dynamically.
قبل كتابة أداة تجريف كاملة، يجدر أيضًا التأكد من أن الهدف يسمح بالوصول الآلي. يشرح دليلنا حول كيفية التحقق مما إذا كان موقع الويب يسمح بالتجريف قراءة قواعد robots وشروط الخدمة.
أي طريقة ينبغي استخدامها لتجريف الصفحات الديناميكية؟
اختر أخف طريقة تعيد البيانات بموثوقية: استدعِ JSON API مخفية عند وجودها، ولا تلجأ إلى متصفح بلا واجهة إلا عند عدم وجودها. يوازن كل خيار بين السرعة والكلفة ومقدار الصفحة الذي يمكنه إعادة إنتاجه.
يقارن الجدول التالي بين الأساليب الأربعة الشائعة لتختار قبل كتابة الشفرة. عمليًا، تجمع معظم المشاريع بين اثنين منها، فتستخدم API مخفية للتحميل الكبير ومتصفحًا للصفحات التي تقاوم ذلك.
| الطريقة | السرعة | الكلفة | الأفضل لـ | القيد الرئيسي |
|---|---|---|---|---|
| JSON API مخفية | الأسرع | الأقل | بيانات خلف استدعاء XHR واضح | قد تتغير نقطة النهاية أو تحتاج إلى رموز مميزة |
| Playwright | متوسطة | أعلى | عرض كامل وتحكم حديث غير متزامن | يستهلك CPU والذاكرة والنطاق الترددي |
| Selenium | متوسطة | أعلى | مكدسات قديمة ودعم واسع للغات | إعداد أبطأ وعمليات انتظار أكثر تفصيلًا |
| requests-html | بطيئة | منخفضة | JavaScript خفيفة في الصفحات البسيطة | غير مُصانة إلى حد كبير وعرضها هش |
تكتسب الكلفة أهمية لأن المتصفح بلا واجهة الموجّه عبر بروكسي محسوب الاستخدام ينزّل بايتات أكثر بكثير من استدعاء API واحد. إذا كنت تُجرف على نطاق واسع، فإن الطريقة التي تختارها تؤثر في الفاتورة بقدر تأثير الشفرة. ولمعرفة الإطار الأوسع لإدارة الوتيرة والرؤوس، راجع أفضل ممارسات تجريف الويب.
كيف تعثر على API المخفية خلف صفحة ديناميكية؟
ابحث عن الطلب في الخلفية الذي ترسله الصفحة لجلب بياناتها، لأن نقطة النهاية تلك تعيد عادةً JSON منظفًا يمكنك استدعاؤه مباشرةً. هذا هو الأسلوب الأسرع والأكثر موثوقية، ويتجنب تشغيل متصفح بالكامل.
افتح أدوات المطور، وانتقل إلى علامة تبويب الشبكة، وصفِّ النتائج حسب Fetch/XHR، ثم أعد تحميل الصفحة. عند ظهور المحتوى، راقب الطلبات التي تعيد JSON تحتوي القيم التي تريدها. افحص URL الطلب وطريقته ومعلمات الاستعلام وأي رؤوس أو رموز مميزة يرسلها، ثم انقر بزر الفأرة الأيمن وانسخه بتنسيق cURL لرؤية البنية الكاملة. ما إن تتمكن من إعادة تنفيذ ذلك الاستدعاء بعميل HTTP، حتى تتجاوز العرض كليًا وتسحب بيانات منظّمة بجزء بسيط من الكلفة.
إليك مثالًا بسيطًا يستدعي نقطة نهاية JSON عبر بروكسي ويقرأ الحقول مباشرةً:
import requests
proxy = "http://USERNAME:[email protected]:823"
proxies = {"http": proxy, "https": proxy}
headers = {
"User-Agent": "Mozilla/5.0",
"Accept": "application/json",
"Referer": "https://example.com/products",
}
params = {"category": "laptops", "page": 1}
r = requests.get(
"https://example.com/api/v2/products",
headers=headers,
params=params,
proxies=proxies,
timeout=30,
)
r.raise_for_status()
data = r.json()
for item in data["items"]:
print(item["name"], item["price"])
إذا كانت نقطة النهاية مقسمة إلى صفحات، فزِد معلمة الصفحة أو اتبع المؤشر التالي الذي تعيده الاستجابة. حين يحتاج الطلب إلى رمز مميز، التقط موضع إصداره الأول من الصفحة وأعد استخدامه ضمن الجلسة نفسها. يعني توجيه الاستدعاء عبر DataImpulse أن نقطة النهاية ترى IP سكنيًا بدل عنوان خادمك، وهو ما يهم عندما تفرض API حدًا للمعدل حسب المصدر. وإذا واجهت حاجز مصادقة في البروكسي نفسه، فملاحظتنا عن مصادقة البروكسي تشرح تنسيق بيانات الاعتماد.
كيف تُجرف الصفحات الديناميكية باستخدام Playwright؟
عندما لا توجد API واضحة لاستدعائها، شغّل متصفحًا بلا واجهة مثل Playwright لكي تنفّذ JavaScript تمامًا كما ستنفّذ للمستخدم، ثم اقرأ DOM المكتمل. يعد Playwright الخيار الحديث الافتراضي لأنه يوفر انتظارًا تلقائيًا موثوقًا ودعمًا غير متزامن من الدرجة الأولى وخيار بروكسي بسيطًا.
ثبّته ونزّل الملف التنفيذي للمتصفح أولًا:
pip install playwright
playwright install chromium
المبدأ الأساسي هو انتظار العنصر المحدد الذي تحتاجه بدل التخمين بفترات نوم ثابتة. يشغّل المثال أدناه Chromium ويوجّهه عبر بروكسي باستخدام صيغة القاموس، وينتظر شبكة المنتجات ويستخرج القيم المعروضة:
from playwright.sync_api import sync_playwright
PROXY = {
"server": "http://gw.dataimpulse.com:823",
"username": "USERNAME",
"password": "PASSWORD",
}
with sync_playwright() as p:
browser = p.chromium.launch(headless=True, proxy=PROXY)
context = browser.new_context(user_agent="Mozilla/5.0")
page = context.new_page()
page.goto("https://example.com/products", wait_until="domcontentloaded")
page.wait_for_selector("div.product-card", timeout=15000)
cards = page.query_selector_all("div.product-card")
for card in cards:
name = card.query_selector(".title").inner_text()
price = card.query_selector(".price").inner_text()
print(name, price)
browser.close()
الانتظار هو موضع نجاح معظم أدوات التجريف الديناميكي أو فشلها، لذا من المفيد معرفة الاستراتيجيات الأربع ومتى تلائم كل منها. فضّل انتظار محدد أو شرط ملموس على networkidle، إذ قد يتعطل في الصفحات التي تبقي الاتصالات الطويلة مفتوحة:
# Wait for a specific element (most reliable)
page.wait_for_selector("div.product-card", timeout=15000)
# Wait for the initial DOM to be built, before every script finishes
page.goto(url, wait_until="domcontentloaded")
# Wait until there are no network connections for 500 ms
page.goto(url, wait_until="networkidle")
# Wait for a custom condition, such as a minimum item count
page.wait_for_function(
"document.querySelectorAll('div.product-card').length > 20"
)
إذا كان هدفك يعتمد بشدة على البرامج النصية التي يشغلها المتصفح، فإن مقالنا المرافق عن تجريف الويب باستخدام JavaScript يتعمق في العرض من جانب العميل الذي يجعل هذه الصفحات صعبة.
كيف تتعامل مع التمرير اللانهائي وأزرار تحميل المزيد؟
فعّل الأحداث نفسها التي تستخدمها الصفحة لتحميل المزيد من المحتوى، ثم انتظر عرض كل دفعة جديدة قبل قراءتها. لا يجلب التمرير اللانهائي وأزرار تحميل المزيد البيانات إلا عند تصرف المستخدم، لذلك لا يلتقط تحميل صفحة واحد سوى الشاشة الأولى.
قبل اللجوء إلى المتصفح، افحص علامة تبويب الشبكة مجددًا، لأن التمرير اللانهائي يعمل في الغالب باستدعاء XHR مقسم إلى صفحات، والتكرار على نقطة النهاية تلك باستخدام نهج requests أعلاه أرخص بكثير من التمرير. وإذا اضطررت إلى التمرير، فنفّذه في حلقة مضبوطة تتوقف عند عدم ظهور عناصر جديدة:
def scroll_until_stable(page, item_selector, max_rounds=30):
seen = 0
for _ in range(max_rounds):
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
page.wait_for_timeout(1500)
count = len(page.query_selector_all(item_selector))
if count == seen:
break # no new items loaded, stop
seen = count
return seen
تحتاج الصفحات التي تستخدم زرًا صريحًا بدل التمرير إلى حلقة نقر. اقرأ عدد العناصر قبل كل نقرة، وانقر الزر، وانتظر زيادة العدد كي لا تسبق العرض أبدًا:
def click_load_more(page, button_selector, item_selector, max_clicks=50):
for _ in range(max_clicks):
button = page.query_selector(button_selector)
if button is None or not button.is_visible():
break
before = len(page.query_selector_all(item_selector))
button.click()
page.wait_for_function(
"([sel, n]) => document.querySelectorAll(sel).length > n",
arg=[item_selector, before],
)
return len(page.query_selector_all(item_selector))
أزل التكرارات أثناء الجمع، إذ إن إعادة قراءة العقد نفسها في كل تمريرة أمر شائع. احتفظ بمجموعة من معرّفات ID أو عناوين URL الفريدة، ولا تضف إلا السجلات التي لم ترها.
هل يمكنك استخدام Selenium بدلًا من Playwright؟
نعم، يشغّل Selenium متصفحًا حقيقيًا بالطريقة نفسها، وهو خيار متين عندما يستخدمه فريقك بالفعل أو يحتاج إلى دعمه الواسع للغات. يحاكي النمط Playwright: حمّل الصفحة، وانتظر شرطًا باستخدام WebDriverWait، ثم اقرأ العناصر من DOM المعروض.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("--headless=new")
options.add_argument("--proxy-server=http://gw.dataimpulse.com:823")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com/products")
WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.product-card"))
)
for card in driver.find_elements(By.CSS_SELECTOR, "div.product-card"):
name = card.find_element(By.CSS_SELECTOR, ".title").text
price = card.find_element(By.CSS_SELECTOR, ".price").text
print(name, price)
driver.quit()
تنبيه واحد: لا تقبل العلامة العادية –proxy-server اسم مستخدم وكلمة مرور، لذا يحتاج البروكسي المصادَق عليه إلى أداة مساعدة. تحقن مكتبة Selenium Wire بيانات الاعتماد بسلاسة، ويعرض شرحنا لإعداد بروكسي Selenium Wire التهيئة الدقيقة. إعداد Selenium أثقل من Playwright وعمليات انتظاره أكثر تفصيلًا، لذلك تبدأ المشاريع الجديدة غالبًا بـ Playwright ما لم يوجد سبب للبقاء مع Selenium.
كيف تخفض النطاق الترددي للبروكسي عند عرض الصفحات؟
احجب الموارد التي لا تحتاج إليها لكي يتوقف المتصفح عن تنزيل الصور والخطوط والوسائط التي لن تحللها. يجلب المتصفح بلا واجهة كل أصل افتراضيًا، وكل بايت من تلك البايتات يكلّف مالًا عند توجيهه عبر بروكسي مسعّر لكل غيغابايت.
يتيح لك Playwright اعتراض الطلبات وإلغاء ما لا صلة له بالاستخراج. يمكن لحجب الصور والوسائط والخطوط أن يخفض حركة مرور البروكسي بوضوح مع إبقاء JSON وHTML اللذين تقرؤهما فعلًا دون تغيير:
BLOCK = {"image", "media", "font"}
def block_heavy(route):
if route.request.resource_type in BLOCK:
route.abort()
else:
route.continue_()
context = browser.new_context()
context.route("**/*", block_heavy)
page = context.new_page()
page.goto("https://example.com/products", wait_until="domcontentloaded")
يمكنك توسيع المعالج نفسه لتجاوز نطاقات التحليلات والإعلانات التي تضيف حملًا دون إضافة بيانات. وبما أن حركة مرور DataImpulse تُحاسب حسب الاستخدام بدءًا من 1 دولار لكل GB ولا تنتهي صلاحيتها، فإن تقليم البايتات المهدرة يخفض كلفة كل عملية تجريف مباشرةً. كما أن إعادة استخدام سياق متصفح واحد عبر الصفحات ذات الصلة تتجنب كلفة بدء التشغيل المتكررة، ويبقى أرخص طلب هو الطلب الذي تتجنبه بالرجوع إلى API مخفية.
كيف تضيف معالجة الأخطاء وإعادة المحاولات؟
ضع كل انتقال داخل حلقة إعادة محاولة بتراجع أسي كي لا ينهي تحميل بطيء واحد أو حجب عابر التشغيل كله. تفشل الصفحات الديناميكية على نحو متقطع، وأداة التجريف التي تستسلم عند أول مهلة ستفقد نسبة كبيرة من السجلات على النطاق الواسع.
التقط المهلة التي يطلقها Playwright، وانتظر فترة متزايدة، وأعد المحاولة عددًا محدودًا من المرات قبل تسجيل الإخفاق والمتابعة:
import time
from playwright.sync_api import TimeoutError as PlaywrightTimeout
def fetch_with_retries(page, url, selector, retries=3, backoff=2):
for attempt in range(1, retries + 1):
try:
page.goto(url, wait_until="domcontentloaded", timeout=30000)
page.wait_for_selector(selector, timeout=15000)
return page.query_selector_all(selector)
except PlaywrightTimeout:
wait = backoff ** attempt
print(f"Attempt {attempt} timed out, retrying in {wait}s")
time.sleep(wait)
raise RuntimeError(f"Failed to load {url} after {retries} attempts")
اجمع بين إعادة المحاولة وتدوير البروكسي لكي يخرج كل اختبار عبر IP جديد. إذا فُرض حد للمعدل على منفذ خروج واحد، فسيصل الطلب التالي إلى عنوان مختلف وينجح غالبًا. تمنحك مجموعة متناوبة من البروكسيات السكنية أو البروكسيات المحمولة عنوان IP جديدًا لكل طلب تلقائيًا، ما يحوّل كثيرًا من حالات الحجب الصعب إلى إعادة محاولة بسيطة. ولمعالجة إخفاقات مستوى البروكسي تحديدًا، تشرح ملاحظتنا عن خطأ HTTP 407 استجابة المصادقة الأكثر شيوعًا.
كيف تُجرف صفحات ديناميكية كثيرة بالتزامن؟
استخدم API غير المتزامنة في Playwright مع semaphore من asyncio لكي تُعرض عدة صفحات دفعة واحدة دون إرهاق جهازك أو الهدف. يحقق التجريف الديناميكي إنتاجيته عبر التزامن، لأن كل صفحة متصفح تقضي معظم وقتها في انتظار الشبكة.
يحدد semaphore سقف عدد الصفحات التي تعمل بالتوازي. شارك متصفحًا وسياقًا واحدين بين المهام، وافتح صفحة لكل URL، واجمع النتائج:
import asyncio
from playwright.async_api import async_playwright
PROXY = {
"server": "http://gw.dataimpulse.com:823",
"username": "USERNAME",
"password": "PASSWORD",
}
async def scrape_one(context, url, sem):
async with sem:
page = await context.new_page()
try:
await page.goto(url, wait_until="domcontentloaded")
await page.wait_for_selector("div.product-card", timeout=15000)
cards = await page.query_selector_all("div.product-card")
return [await c.inner_text() for c in cards]
finally:
await page.close()
async def main(urls):
sem = asyncio.Semaphore(5) # at most 5 pages at once
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True, proxy=PROXY)
context = await browser.new_context()
tasks = [scrape_one(context, u, sem) for u in urls]
results = await asyncio.gather(*tasks)
await browser.close()
return results
urls = ["https://example.com/products?page=%d" % i for i in range(1, 21)]
data = asyncio.run(main(urls))
اجعل حد التزامن معتدلًا. تستنفد الصفحات المتوازية الكثيرة الذاكرة وتتجاوز حدود المعدل، فتكلّفك إعادة محاولات أكثر مما يوفره التوازي. ابدأ بنحو 5، ولا ترفعه إلا ما دامت معدلات النجاح مرتفعة.
كيف تصدّر البيانات المُجرفة إلى JSON وCSV؟
اجمع نتائج كل صفحة في قائمة من القواميس، ثم اكتب تلك القائمة إلى JSON للبيانات المتداخلة أو إلى CSV للجداول المسطحة الملائمة لجداول البيانات. إن فصل الاستخراج عن التصدير يجعل أداة التجريف أسهل في الاختبار وإعادة التشغيل.
import json
import csv
records = [
{"name": "Laptop A", "price": "999"},
{"name": "Laptop B", "price": "1299"},
]
# Export to JSON
with open("products.json", "w", encoding="utf-8") as f:
json.dump(records, f, ensure_ascii=False, indent=2)
# Export to CSV
with open("products.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["name", "price"])
writer.writeheader()
writer.writerows(records)
اختر JSON عندما تحتوي السجلات على قوائم أو كائنات متداخلة، واختر CSV عندما تشترك كل السجلات في الحقول المسطحة نفسها وسيفتحها المحللون في جدول بيانات. وحّد حقولك قبل الكتابة لكي يمتلك كل سجل المفاتيح نفسها، فتظل خطوة التصدير بسيطة مهما كانت طريقة عرض الصفحة الديناميكية. ومن هنا، يغذي JSON نفسه تحميل قاعدة بيانات أو مهمة تحليلات من دون تحليل إضافي.

الأسئلة الشائعة
كيف أعرف إن كانت الصفحة ديناميكية قبل كتابة أداة تجريف؟
قارن عرض المصدر بلوحة العناصر في أدوات المطور، أو احسب عنصرًا مستهدفًا في HTML الخام مقابل DOM المعروض. إذا ظهرت البيانات بعد تشغيل JavaScript فقط، فالصفحة ديناميكية وتحتاج إلى استدعاء API أو متصفح بلا واجهة.
هل من الأفضل استدعاء API المخفية أم استخدام متصفح بلا واجهة؟
استدعِ API المخفية عندما تجدها، لأنها تعيد JSON منظفًا بجزء بسيط من كلفة العرض ووقته. استخدم متصفحًا بلا واجهة فقط عندما لا توجد API قابلة لإعادة الإنتاج أو حين تعتمد البيانات على برامج نصية معقدة من جانب العميل.
هل ينبغي استخدام Playwright أم Selenium للتجريف الديناميكي؟
يعد Playwright الخيار الحديث الافتراضي بفضل الانتظار التلقائي الموثوق والدعم غير المتزامن المدمج، لذا تبدأ المشاريع الجديدة منه عادةً. يناسب Selenium حالتك عندما تستخدمه مكدستك بالفعل أو تحتاج إلى دعمه الأوسع للغات.
كيف أخفض النطاق الترددي للبروكسي عند استخدام متصفح بلا واجهة؟
اعترض الطلبات وألغِ الصور والخطوط والوسائط والتحليلات التي لا تحللها. يمكن أن يخفض ذلك حركة المرور بدرجة كبيرة لأن كلفة البروكسي تُقاس لكل غيغابايت، كما يسرّع تحميل كل صفحة.
كيف أُجرف المحتوى الذي يُحمّل بالتمرير اللانهائي؟
افحص أولًا علامة تبويب الشبكة بحثًا عن استدعاء XHR المقسم إلى صفحات خلف التمرير، وكرّر مباشرةً على نقطة النهاية تلك. وإذا اضطررت إلى التمرير، فنفّذه في حلقة مضبوطة وانتظر عرض كل دفعة جديدة قبل قراءتها.
متى لا يكون DataImpulse الخيار المناسب؟
إذا كنت تحتاج إلى بروكسيات ISP ثابتة أو API تجريف مُدارة بالكامل أو الوصول إلى المواقع المصرفية والحكومية، فإن DataImpulse ليس الأداة المناسبة. يركز على البروكسيات السكنية والمحمولة ومن مراكز البيانات المتناوبة لجمع البيانات العامة والوصول إلى المحتوى.
جرف الصفحات الديناميكية ببروكسيات موثوقة
إذا كانت أداة التجريف تحتاج إلى عناوين IP سكنية أو محمولة أو من مراكز البيانات تتصرف مثل الزوار الحقيقيين، فيمكنك البدء بحركة مرور الدفع حسب الاستخدام بدءًا من 1 دولار لكل GB. أنشئ حساب DataImpulse ووجّه تجريفك الديناميكي عبر جلسات متناوبة أو ثابتة.
