وباسکرپینگ پیشرفته با پروکسیهای مسکونی ChangeMyIP و Playwright
پروکسیهای مسکونی چرخشی ChangeMyIP را با Playwright ترکیب کنید تا وبسایتهای پویا را در مقیاس بزرگ استخراج کنید. این آموزش پیشرفته چرخش IP در هر درخواست، دور زدن اثر انگشت مرورگر و مدیریت خطای قوی را پوشش میدهد.
بررسی اجمالی
Playwright یک کتابخانه قدرتمند خودکارسازی مرورگر است که از Chromium، Firefox و WebKit پشتیبانی میکند. وقتی با پروکسیهای مسکونی ChangeMyIP ترکیب شود، به ابزاری قوی برای وباسکرپینگ پیشرفته تبدیل میشود و محدودیتهای جغرافیایی و نرخ را دور میزند. این آموزش راهاندازی Playwright با پروکسیهای مسکونی چرخشی ChangeMyIP، پیادهسازی چرخش IP در هر درخواست، مدیریت اثر انگشت مرورگر و مدیریت محتوای پویا را پوشش میدهد.
پیشنیازها
- Node.js 16+ و npm
- یک حساب ChangeMyIP با دسترسی به پروکسی مسکونی (یا دیتاسنتر اگر ترجیح میدهید)
- دانش پایه JavaScript/Node.js
درک نقاط پایانی پروکسی مسکونی ChangeMyIP
ChangeMyIP پروکسیهای مسکونی را در بیش از 40 کشور ارائه میدهد. میتوانید با نام کاربری/رمز عبور احراز هویت کنید. قالب نقطه پایانی برای پروکسیهای HTTP به این صورت است:
http://<username>:<password>@<proxy-host>:<port>
برای SOCKS5:
socks5://<username>:<password>@<proxy-host>:<port>
جاینگهدارها را با اطلاعات ورود از داشبورد ChangeMyIP خود جایگزین کنید. پروکسیهای مسکونی چرخشی بهطور پیشفرض برای هر درخواست یک IP جدید اختصاص میدهند، یا میتوانید با استفاده از شناسه نشست در نام کاربری یک نشست چسبنده حفظ کنید (مستندات ChangeMyIP را ببینید). در این آموزش، فرض ما چرخشی است.
مرحله ۱: راهاندازی پروژه Playwright
۱. یک دایرکتوری جدید ایجاد کنید و npm را مقداردهی اولیه کنید:
mkdir changeMyIP-playwright-scraper
cd changeMyIP-playwright-scraper
npm init -y
۲. Playwright و وابستگیهایش را نصب کنید:
npm install playwright
npx playwright install
مرحله ۲: پیکربندی Playwright برای استفاده از پروکسی ChangeMyIP
یک فایل scraper.js ایجاد کنید و کد زیر را اضافه کنید. این کد یک مرورگر Chromium را با پروکسی ChangeMyIP شما راهاندازی میکند:
const { chromium } = require('playwright');
const proxyUrl = 'http://username:password@proxy-host:port'; // Replace with your ChangeMyIP details
(async () => {
const browser = await chromium.launch({
proxy: {
server: proxyUrl,
},
});
const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');
const content = await page.textContent('body');
console.log(content);
await browser.close();
})();
آن را با node scraper.js اجرا کنید. باید IP پروکسی را ببینید، نه IP واقعی خود را.
مرحله ۳: پیادهسازی پروکسیهای چرخشی در هر درخواست
برای اسکرپینگ پیشرفته، ممکن است برای هر صفحه یا درخواست یک IP تازه بخواهید. از آنجا که پروکسیهای مسکونی ChangeMyIP بهطور پیشفرض در هر درخواست میچرخند، میتوانید بهسادگی برای هر کار اسکرپ یک زمینه مرورگر جدید ایجاد کنید. اگر نیاز دارید IP جدیدی را اجبار کنید، یک نمونه مرورگر جدید راهاندازی کنید یا از یک نشست پروکسی جدید استفاده کنید.
در اینجا تابعی است که هر بار یک URL را با IP جدید اسکرپ میکند:
async function scrapeWithNewIP(url) {
const browser = await chromium.launch({
proxy: { server: proxyUrl },
});
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle' });
const data = await page.evaluate(() => document.body.innerText);
await browser.close();
return data;
}
این تابع را برای هر URL هدف فراخوانی کنید. برای کارایی، مرورگر را دوباره استفاده کنید و یک زمینه جدید با پروکسی متفاوت ایجاد کنید (اگر طرح شما چندین نقطه پایانی را مجاز میداند). در غیر این صورت، راهاندازی یک مرورگر جدید برای مقیاس متوسط قابل قبول است.
مرحله ۴: مدیریت اثر انگشت مرورگر برای جلوگیری از مسدود شدن
سیستمهای ضدربات خودکارسازی را تشخیص میدهند. ویژگیهای مرورگر را در هر نشست تصادفی کنید. Playwright اجازه میدهد user agent، viewport، timezone و موارد دیگر را تنظیم کنید. از کتابخانهای مثل playwright-extra همراه با puppeteer-extra-plugin-stealth استفاده کنید (سازگار با Playwright از طریق playwright-extra). یا هدرها را بهصورت دستی تنظیم کنید.
مثال: راهاندازی با user agent و viewport سفارشی:
const browser = await chromium.launch({
proxy: { server: proxyUrl },
});
const context = await browser.newContext({
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
viewport: { width: 1920, height: 1080 },
locale: 'en-US',
timezoneId: 'America/New_York',
});
user agentها را از یک لیست برای هر نشست بچرخانید.
مرحله ۵: اسکرپ محتوای پویا و مدیریت صفحهبندی
Playwright بهصورت خودکار برای عناصر صبر میکند. از page.waitForSelector برای محتوای پویا استفاده کنید. برای اسکرول بینهایت، تا زمانی که آیتم جدیدی بارگیری نشود اسکرول کنید.
مثال: استخراج عنوان محصولات از یک صفحه تجارت الکترونیک با اسکرول بینهایت:
async function scrapeProducts(page) {
await page.goto('https://example.com/products', { waitUntil: 'networkidle' });
let previousHeight = 0;
while (true) {
const currentHeight = await page.evaluate(() => document.body.scrollHeight);
if (currentHeight === previousHeight) break;
previousHeight = currentHeight;
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
await page.waitForTimeout(2000);
}
const products = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.product-title')).map(el => el.innerText);
});
return products;
}
مرحله ۶: پیادهسازی منطق تلاش مجدد با IPهای تازه
وقتی درخواستی شکست میخورد (مثلاً CAPTCHA، timeout)، با IP جدید دوباره تلاش کنید. از آنجا که پروکسیهای چرخشی در هر درخواست IP را تغییر میدهند، صرفاً تلاش مجدد ممکن است کافی باشد. برای نشستهای چسبنده، میتوانید شناسه نشست را تغییر دهید.
async function scrapeWithRetry(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const browser = await chromium.launch({ proxy: { server: proxyUrl } });
try {
const page = await browser.newPage();
await page.goto(url, { timeout: 30000 });
const data = await page.content();
await browser.close();
return data;
} catch (error) {
console.error(`Attempt ${i + 1} failed: ${error.message}`);
await browser.close();
}
}
throw new Error(`Failed after ${maxRetries} retries`);
}
عیبیابی
- خطای احراز هویت: نام کاربری و رمز عبور را دوباره بررسی کنید. مطمئن شوید در صورت داشتن کاراکترهای خاص، URL-encoded شدهاند.
- اتصال پروکسی رد شد: میزبان و پورت پروکسی را بررسی کنید. اگر از احراز هویت IP استفاده میکنید، بررسی کنید که IP شما در لیست سفید باشد (ChangeMyIP از نام کاربری/رمز عبور پشتیبانی میکند، پس از آن استفاده کنید).
- CAPTCHA یا مسدود شدن: user agentها را بچرخانید و تأخیرهای تصادفی وارد کنید. برای نرخ موفقیت بهتر از پروکسیهای مسکونی استفاده کنید.
- عملکرد کند: تعداد نمونههای مرورگر را کاهش دهید، از حالت headless استفاده کنید و منابع غیرضروری (تصاویر، CSS) را با
page.routeمسدود کنید. - نشست چسبنده کار نمیکند: برای قالب صحیح شناسه نشست در نام کاربری، مستندات ChangeMyIP را ببینید.
خلاصه
شما یاد گرفتید چگونه پروکسیهای مسکونی ChangeMyIP را با Playwright برای وباسکرپینگ پیشرفته ادغام کنید. با چرخش IPها، مدیریت اثر انگشت مرورگر و مدیریت محتوای پویا، میتوانید در مقیاس بزرگ اسکرپ کنید و در عین حال از مسدود شدن دوری کنید. به یاد داشته باشید که به شرایط خدمات وبسایتها و robots.txt احترام بگذارید. شبکه پروکسی مسکونی ChangeMyIP بیش از 40 کشور و چندین پروتکل را ارائه میدهد و آن را به گزینهای مناسب برای این کارها تبدیل میکند.