Skip to content
advanced

وب اسکرپینگ پیشرفته با پروکسیهای مسکونی چرخشی Dataimpulse و Playwright

بیاموزید چگونه پروکسیهای مسکونی چرخشی Dataimpulse را با Playwright یکپارچه کنید تا یک خط لوله وب اسکرپینگ مقاوم و در مقیاس بزرگ بسازید که محتوای پویا و اقدامات ضدربات را مدیریت میکند.

لینوکس HTTP(S) وب اسکرپینگ

نمای کلی

Dataimpulse پروکسیهای مسکونی و موبایل مقرونبهصرفه با پشتیبانی از HTTP و SOCKS5 ارائه میدهد که برای وب اسکرپینگ با حجم بالا ایدهآل است. وقتی با Playwright، یک کتابخانه قدرتمند اتوماسیون مرورگر، ترکیب شود، میتوانید سایتهای پویا و پر از JavaScript را اسکرپ کنید و در عین حال IPها را برای جلوگیری از مسدود شدن بچرخانید. این آموزش تکنیکهای پیشرفته برای یکپارچهسازی پروکسیهای Dataimpulse با Playwright با استفاده از asyncio پایتون برای اسکرپینگ همزمان را پوشش میدهد.

پیشنیازها

  • یک حساب Dataimpulse با پروکسیهای مسکونی یا موبایل (پرداخت به میزان مصرف). به میزبان پروکسی، پورت، نام کاربری و رمز عبور خود نیاز دارید.
  • پایتون ۳.۸ یا بالاتر.
  • Playwright نصبشده: pip install playwright و playwright install.
  • دانش پایه از async/await در پایتون.

مراحل

1. راهاندازی اعتبارنامههای پروکسی Dataimpulse

وارد داشبورد Dataimpulse خود شوید و نقطه پایانی پروکسی خود را یادداشت کنید. Dataimpulse از هر دو پروتکل HTTP و SOCKS5 پشتیبانی میکند. برای این آموزش، از HTTP استفاده میکنیم، اما در صورت نیاز میتوانید طرح را با socks5 جایگزین کنید.

اعتبارنامههای خود را در متغیرهای محیطی ذخیره کنید تا از هاردکد کردن جلوگیری کنید:

export DI_PROXY_HOST="your-proxy-host.dataimpulse.com"
export DI_PROXY_PORT="12345"
export DI_PROXY_USER="your-username"
export DI_PROXY_PASS="your-password"

مقادیر را با اعتبارنامههای واقعی Dataimpulse خود جایگزین کنید.

2. نصب بستههای پایتون موردنیاز

یک فایل پایتون جدید، مثلاً scraper.py، ایجاد کنید و بستههای لازم را نصب کنید:

pip install playwright aiohttp

3. اجرای Playwright با پروکسی Dataimpulse

گزینه proxy در Playwright به شما امکان میدهد سرور پروکسی، نام کاربری و رمز عبور را مشخص کنید. در ادامه نحوه اجرای Chromium با پروکسی Dataimpulse شما آمده است:

import os
from playwright.async_api import async_playwright

async def scrape_with_proxy():
    async with async_playwright() as p:
        proxy_settings = {
            "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
            "username": os.getenv('DI_PROXY_USER'),
            "password": os.getenv('DI_PROXY_PASS')
        }
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        page = await browser.new_page()
        await page.goto("https://httpbin.org/ip")
        content = await page.content()
        print(content)
        await browser.close()

# Run
import asyncio
asyncio.run(scrape_with_proxy())

اسکریپت را اجرا کنید تا تأیید کنید که IP شما همان IP پروکسی است.

4. پیادهسازی چرخش IP

پروکسیهای مسکونی Dataimpulse IPها را بهطور خودکار در هر درخواست میچرخانند یا میتوانید از نشستهای چسبنده استفاده کنید. برای چرخش در هر درخواست، کافی است برای هر URL که اسکرپ میکنید یک context یا صفحه جدید مرورگر ایجاد کنید. برای عملکرد بهتر، از نمونه مرورگر مجدداً استفاده کنید اما برای هر درخواست یک context جدید ایجاد کنید:

async def scrape_urls(urls):
    async with async_playwright() as p:
        proxy_settings = {
            "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
            "username": os.getenv('DI_PROXY_USER'),
            "password": os.getenv('DI_PROXY_PASS')
        }
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        
        for url in urls:
            context = await browser.new_context()
            page = await context.new_page()
            try:
                await page.goto(url, timeout=30000)
                # Extract data...
                print(f"Scraped {url} with new IP")
            except Exception as e:
                print(f"Error scraping {url}: {e}")
            finally:
                await context.close()
        
        await browser.close()

5. استفاده از نشستهای چسبنده برای جریانهای چندمرحلهای

اگر نیاز دارید همان IP را در چندین درخواست حفظ کنید (مثلاً ورود، سپس پیمایش)، Dataimpulse ممکن است از نشستهای چسبنده از طریق شناسه نشست در نام کاربری پشتیبانی کند. برای قالب دقیق، مستندات Dataimpulse را بررسی کنید. بهطور معمول، یک شناسه نشست را به نام کاربری اضافه میکنید مانند username-session-abc123. در ادامه یک مثال آمده است:

session_id = "abc123"
proxy_settings = {
    "server": f"http://{os.getenv('DI_PROXY_HOST')}:{os.getenv('DI_PROXY_PORT')}",
    "username": f"{os.getenv('DI_PROXY_USER')}-session-{session_id}",
    "password": os.getenv('DI_PROXY_PASS')
}

6. مدیریت همزمانی و مدیریت خطا

برای اسکرپینگ در مقیاس بزرگ، از asyncio برای اجرای چندین اسکرپر بهصورت همزمان استفاده کنید. به محدودیتهای نرخ Dataimpulse و تحمل سایت هدف توجه کنید. از سمافورها برای محدود کردن همزمانی استفاده کنید:

import asyncio
from asyncio import Semaphore

async def worker(url, browser, semaphore):
    async with semaphore:
        context = await browser.new_context()
        page = await context.new_page()
        try:
            await page.goto(url, timeout=30000)
            # Extract data...
            return await page.title()
        except Exception as e:
            print(f"Error: {e}")
            return None
        finally:
            await context.close()

async def main(urls):
    semaphore = Semaphore(10)  # limit to 10 concurrent pages
    async with async_playwright() as p:
        proxy_settings = {...}  # as before
        browser = await p.chromium.launch(proxy=proxy_settings, headless=True)
        tasks = [worker(url, browser, semaphore) for url in urls]
        results = await asyncio.gather(*tasks)
        await browser.close()
        return results

urls = ["https://example.com/page1", "https://example.com/page2"]
titles = asyncio.run(main(urls))
print(titles)

عیبیابی

  • احراز هویت پروکسی ناموفق است: نام کاربری/رمز عبور خود را دوباره بررسی کنید. مطمئن شوید که از میزبان و پورت صحیح از Dataimpulse استفاده میکنید.
  • تایماوتها یا پاسخهای کند: مقدار timeout را در page.goto() افزایش دهید. استفاده از مکان پروکسی متفاوت یا کاهش همزمانی را در نظر بگیرید.
  • IP مسدود شده: حتی IPهای مسکونی نیز میتوانند مسدود شوند. تأخیرها را پیادهسازی کنید، user agentها را بچرخانید و CAPTCHAها را بهخوبی مدیریت کنید.
  • کرش Playwright روی لینوکس: وابستگیهای گمشده را با playwright install-deps نصب کنید.

خلاصه

شما یاد گرفتهاید که چگونه پروکسیهای مسکونی چرخشی Dataimpulse را با Playwright برای وب اسکرپینگ پیشرفته یکپارچه کنید. با استفاده از اتوماسیون مرورگر Playwright و استخر IP بزرگ Dataimpulse، میتوانید سایتهای پویا را در مقیاس بزرگ اسکرپ کنید و در عین حال مسدود شدن را به حداقل برسانید. به یاد داشته باشید که به شرایط خدمات و robots.txt سایتهای هدف احترام بگذارید.