كشط الويب باستخدام Puppeteer والوكلاء: دليل المبتدئين

الكشط, كانون الثاني/يناير-31-20255 دقائق للقراءة

لقد أصبح تجريف الويب جزءًا لا يتجزأ من عملية جمع البيانات الحديثة لمحللي البيانات ومطوري الويب ومتخصصي تحسين محركات البحث. ولكن، مع تزايد استخدام المواقع الإلكترونية لمحتوى ديناميكي وإجراءات مكافحة الروبوتات، غالبًا ما تقصر الطرق التقليدية عن تحقيق ذلك.

في هذا الدليل، سنأخذك خطوة بخطوة عبر أساسيات تجريف المواقع الإلكترونية مثل المحترفين، باستخدام Puppeteer والبروكسي. بدءًا من إعداد Puppeteer إلى التعامل مع المحتوى الديناميكي وتجاوز دفاعات مكافحة الروبوتات، سنغطي كل ذلك بأمثلة عملية.

لماذا كشط الويب باستخدام Puppeteer؟

Puppeteer هي مكتبة Node.js توفر واجهة برمجة تطبيقات عالية المستوى للتحكم في كروم أو كروم. على عكس أدوات الكشط التقليدية، تتفوق Puppeteer في عرض صفحات الويب الديناميكية ذات الجافا سكريبت الثقيلة والديناميكية. وهذا يمنحها ميزة كبيرة عند كشط المواقع الإلكترونية التي تعتمد بشكل كبير على جافا سكريبت.

حالات الاستخدام الشائعة للعرائس المتحركة

  • كشط المحتوى الديناميكي: استخراج البيانات من المواقع الإلكترونية التي يتم فيها تحميل المحتوى ديناميكيًا عبر JavaScript.
  • الاختبار الآلي: اختبار تطبيقات الويب في بيئة متصفح بدون رأس.
  • مراقبة تحسين محركات البحث: تتبع التغييرات والتحديثات على صفحات المنافسين.

ومع ذلك، فإن الكشط وحده لا يكفي. فالعديد من المواقع الإلكترونية لديها تدابير قوية لمكافحة الكشط مثل حظر بروتوكول الإنترنت أو الحد من المعدل. وهنا يأتي دور الوكلاء للمساعدة في تجاوز القيود والحفاظ على سلاسة الكشط.

إعداد الدمى المتحركة

للبدء، قم أولاً بتثبيت Puppeteer. افتح المحطة الطرفية وقم بتشغيل:

npm install puppeteer

التصفح بدون رأس

بشكل افتراضي، يعمل Puppeteer افتراضيًا في مقطوع الرأس مما يعني عدم وجود واجهة مستخدم رسومية مرئية للمتصفح. هذا الوضع مثالي لمعظم مهام الكشط، لأنه أسرع وأقل استهلاكًا للموارد. للتطوير والتصحيح، يمكنك تعطيل هذا الوضع لرؤية المتصفح أثناء العمل.

تشغيل متصفح متصفح العرائس

فيما يلي نص برمجي بسيط لفتح Puppeteer والانتقال إلى موقع الويب هذا الموقع

const puppeteer = require('puppeteer');
(async () => {
 const browser = await puppeteer.launch({ headless: true });
 const page = await browser.newPage();
 await page.goto('https://books.toscrape.com/');
 console.log('Page loaded!');
 await browser.close();
})();

استخراج البيانات باستخدام Puppeteer

بمجرد أن تفتح صفحة، فإن الخطوة التالية هي التفاعل مع DOM (نموذج كائن المستند) لاستخراج البيانات التي تحتاجها. يوفر Puppeteer العديد من الطرق للاستعلام عن عناصر صفحة الويب ومعالجتها.

مثال على كشط بيانات الكتاب

باستخدام الموقع الإلكتروني "Books to Scrape" كمثال، إليك كيفية استخراج العناوين والأسعار والتوافر:

const titleSelector = 'article.product_pod h3 a';
const priceSelector = 'article.product_pod p.price_color';
const availabilitySelector = 'article.product_pod p.instock.availability';
const bookData = await page.evaluate((titleSelector, priceSelector, availabilitySelector) => {
 const books = [];
 const titles = document.querySelectorAll(titleSelector);
 const prices = document.querySelectorAll(priceSelector);
 const availability = document.querySelectorAll(availabilitySelector);
 titles.forEach((title, index) => {
   books.push({
     title: title.textContent.trim(),  // Fixed: Extract text content instead of 'title' attribute
     price: prices[index].textContent.trim(),
     availability: availability[index].textContent.trim()
   });
 });
 return books;
}, titleSelector, priceSelector, availabilitySelector);
console.log(bookData);

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

التعامل مع المحتوى الديناميكي

تعتمد بعض المواقع الإلكترونية على JavaScript لتحميل المحتوى ديناميكيًا. وهنا يتألق برنامج Puppeteer، حيث يمكنه التفاعل مع المحتوى الديناميكي والتعامل معه.

انتظار تحميل العناصر

في مواقع الويب التي تحتوي على جافا سكريبت بكثافة، قد تواجه مشاكل في تحميل الصفحة ولكن العناصر المطلوبة غير متوفرة بعد. للتعامل مع ذلك، استخدم الأوامر التالية:

  • الصفحة.waitForSelectorSelector(): انتظار ظهور عناصر محددة في DOM.
  • الصفحة.waitForNavigation(): انتظر حتى يكتمل تصفح الصفحة.

مثال على ذلك:

انتظر page.goto('https://books.toscrape.com/');
await page.waitForForSelector('article.product_pod'// يضمن تحميل المحتوى بالكامل

تكامل الوكلاء مع Puppeteer

البروكسيات ضرورية لكفاءة تجريف الويب بكفاءة، خاصة عند استهداف المواقع الإلكترونية ذات الحدود السعرية أو القيود الجغرافية.

لماذا استخدام الوكلاء؟

  • تجنب حظر الـ IP: قم بتدوير عناوين IP لتجاوز آليات مكافحة الاختراق.
  • الاستهداف الجغرافي: الوصول إلى المحتوى الخاص بالموقع الجغرافي.
  • التعامل مع حدود المعدل: توزيع الطلبات لتجنب التحميل الزائد على عنوان IP واحد.

تهيئة Puppeteer لاستخدام وكيل

البروكسيات ضرورية لكشط الويب لتجنب حظر بروتوكول الإنترنت والتعامل مع حدود المعدل والوصول إلى المحتوى المقيد جغرافيًا. في هذا الدليل، سوف نستخدم بروكسيات ProxyScrape السكنية عالية الجودة، والتي توفر تناوبًا موثوقًا ومجهولاً لعنوان IP من أجل تجريف فعال.

يمكنك إضافة إعدادات الوكيل عن طريق تضمين -خادم وكيل-خادم وكيل وسيطة عند تشغيل Puppeteer:

const puppeteer = require('puppeteer');
(async () => {
   const proxyServer = 'rp.scrapegw.com:6060'; // ProxyScrape residential proxy
   const proxyUsername = 'proxy_username';
   const proxyPassword = 'proxy_password';
   // Launch Puppeteer with proxy
   const browser = await puppeteer.launch({
       headless: true, // Set to false if you want to see the browser
       args: [`--proxy-server=http://${proxyServer}`] // Set the proxy
   });
   const page = await browser.newPage();
   // Authenticate the proxy
   await page.authenticate({
       username: proxyUsername,
       password: proxyPassword
   });
   // Navigate to a test page to check IP
   await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });
   // Get the response content
   const content = await page.evaluate(() => document.body.innerText);
   console.log('IP Info:', content);
   await browser.close();
})();

الميزات الرئيسية في هذا السيناريو:

  • تهيئة الوكيل: يتم تشغيل الدمية مع -خادم وكيل-خادم وكيل تشير الوسيطة إلى الوكيل السكني ProxyScrape (rp.scrapegw.com:6060).
  • معالجة المصادقة: الصفحة.مصادقة() يُستخدم لتمرير بيانات اعتماد الوكيل (اسم_المستخدم_الوكيل و كلمة المرور_الوكيل).
  • التحقق: يتنقل البرنامج النصي إلى https://httpbin.org/ip للتحقق من عنوان IP الحالي والتأكد من أن الوكيل يعمل.

الخاتمة

يعد تجريف الويب باستخدام Puppeteer طريقة قوية لاستخراج البيانات من مواقع الويب الديناميكية، ولكن البروكسيات ضرورية لتجنب الحظر وتجاوز القيود وضمان جمع البيانات دون انقطاع. تلعب جودة البروكسيات دورًا حاسمًا في نجاح مشاريع الكشط - يمكن أن تؤديالبروكسيات منخفضة الجودةأو المستخدمة بشكل مفرط إلى حظر متكرر ونتائج غير موثوقة. لهذا السبب فإن استخدام البروكسيات السكنية عالية الجودة من ProxyScrape يضمن تجربة كشط سلسة مع تناوب موثوق لعنوان IP وإخفاء الهوية.

إذا كنت بحاجة إلى مساعدة في كشط الويب، فلا تتردد فيالانضمام إلى خادم Discord الخاص بنا حيث يمكنك التواصل مع مطورين آخرين والحصول على الدعم . ولا تنسَ أيضًا متابعتنا على يوتيوب للحصول على المزيد من البرامج التعليمية والأدلة حول كشط الويب وتكامل البروكسي.
كشط سعيد!