شعار proxyscrape داكن

كيفية كشط صفحات التمرير اللانهائي باستخدام بايثون

كيفية القيام بذلك, بايثون, كشط, Nov-15-20225 دقائق للقراءة

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

جدول المحتويات

في عالم اليوم، يستفيد الجميع من التقنيات الجديدة. يمكنك الوصول إلى البيانات المنظمة بطريقة آلية بمساعدة كشط الويب. على سبيل المثال، يمكنك استخدام كشط الويب من أجل:

  • مراقبة الأسعار
  • توليد العملاء المحتملين
  • مراقبة الأخبار
  • أبحاث السوق
  • ذكاء الأسعار

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

دعنا أولاً نفهم فوائد كشط صفحات التمرير اللانهائي.

لماذا تحتاج إلى كشط صفحات التمرير اللانهائي؟

فيما يلي بعض أسباب كشط صفحات التمرير اللانهائي.

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

بصرف النظر عن المزايا المذكورة أعلاه لكشط صفحات التمرير اللانهائي، هناك بعض السلبيات أيضًا مثل:

  • إنه ليس رائعًا لتحسين محركات البحث (SEO).
  • ليس من السهل على المستخدمين ذوي الإعاقات الجسدية التنقل عبر الصفحات التي تحتوي على تمرير لا نهائي.
  • يمكن أن تستغرق مواقع الويب ذات التمرير اللانهائي وقت تحميل طويل قد يأتي من طرف المستخدم أو من طرف التطوير.

كيفية كشط صفحات التمرير اللانهائي باستخدام بايثون

دعونا نرى كيفية كشط صفحات التمرير اللانهائي باستخدام Python بمساعدة الخطوات المذكورة أدناه.

مكتبات الاستيراد

تحتاج إلى استيراد مكتبة سيلينيوم.

من selenium استيراد webdriver
من selenium.webdriver.common.keys استيراد مفاتيح من selenium.webdriver.common.keys استيراد مفاتيح            
استيراد الوقت

إعداد السيلينيوم

هنا عليك اختيار المتصفح الذي تريد استخدامه. سنختار كروم لأنه يوفر خيارات أكثر من فايرفوكس. 

def get_selenium():                          
  خيارات = webdriver.ChromeOptions()
  options.add_argument('---تجاهل-شهادة-الأخطاء')
  options.add_argument('--التخفي')
  options.add_argument('headless')                       
   برنامج التشغيل = webdriver.Chrome(chrome_options=خيارات)
  إرجاع (برنامج التشغيل)

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

يمكننا حذف العلامتين أي؛ تجاهل-شهادة-أخطاء-شهادة والتخفي.

إذا واجهت كلمة التحقق أو شعار ملف تعريف الارتباط الذي يمنع تحميل صفحتك، يمكنك النقر على موافق والمتابعة إلى الصفحة بشكل طبيعي. ومع ذلك، إذا تم إغلاق المتصفح بشكل غير متوقع، يمكنك استخدام time.sleep() لإيقاف الشيفرة مؤقتًا وأخذ وقت كافٍ لتصحيح الأخطاء.

إصلاح التمرير اللانهائي

تحتاج إلى النظر في بنية HTML لصفحتك لإصلاح التمرير اللانهائي واتباع الخطوات المذكورة أدناه.

  • عليك أن تجد العنصر الأخير الذي تم تحميله على الصفحة.
  • عليك استخدام سيلينيوم للتمرير لأسفل إلى هذا العنصر.
  • لانتظار تحميل الصفحة المزيد من المحتوى، استخدم time.sleep().
  • قم بالتمرير مرة أخرى إلى آخر عنصر تم تحميله على الصفحة.
  • تحتاج إلى تكرار العملية نفسها حتى تصل إلى نهاية الصفحة.

يمكنك النظر في المثال أدناه لفهم أفضل.

سيلينيوم = get_selenium()              
selenium.get("your/url")   
Last_elem = '';
بينما صحيح
   current_last_elem = "#my-div > ul > li:last-child"
   التمرير = "document.querySelector(\''' + current_last_elem + "\").scrollIntoView()؛"
   سيلينيوم.execute_script(التمرير)
   الوقت.sleep(3)
  إذا (last_elem = = = current_elem)
     فاصل
  غير ذلك
      آخر_مليم = الحالي_مليم

في الكود أعلاه، استخدمنا jQuery وJavascript داخل Python. 

هنا,

  • لقد استخدمنا الدالة selenium.get() التي ستفتح صفحة عنوان URL الخاص بنا. ومع ذلك، إذا كنت تريد إضافة كلمة رئيسية إلى البحث عن عنوان URL الخاص بك، يمكنك استخدام السطر التالي من التعليمات البرمجية.
selenium.get("your/url.com/{0}".format(keyword))
  • قمنا بتهيئة آخر_وقت إلى 0 بتخزين سلسلة فارغة فيه.
  • لقد استخدمنا حلقة بينما التي استخدمنا فيها CSS_selector أو Xpath للحصول على العنصر_الأخير_الحالي. للحصول على المسار، اتبع الخطوات التالية. افتح صفحتك، ولتحديد العنصر الذي تريد المسار إليه، عليك استخدام أدوات الويب. يمكنك اتباع هذا البرنامج التعليمي لتحديد العنصر في بنية HTML للصفحة والحصول على Xpath في كروم.
  • افتح صفحتك.
  • لتحديد عنصر تحتاج إلى المسار إليه، عليك استخدام أدوات الويب. يمكنك اتباع هذا البرنامج التعليمي لتحديد العنصر في بنية HTML للصفحة والحصول على Xpath في كروم.
  • لتمرير الصفحة لأسفل إلى العنصر المحدد، استخدمنا jQuery و scrollIntoView(). 
"document.querySelector(\'" + .. + ").scrollIntoView()؛"

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

  • نقوم بتشغيل البرنامج النصي js باستخدام selenium.execute_script().
  • تحتاج إلى منح الصفحة وقتًا كافيًا للتحميل حتى تتمكن من العثور على العنصر الأخير. ولذلك، فإن الدالة time.sleep() مهمة لأنها توقف التنفيذ لبضع ثوانٍ. إذا لم تمنح الصفحة وقتًا كافيًا للتحميل، سيتوقف التمرير، وستحصل على نتيجة غير محددة.
  • نتحقق مما إذا تم العثور على عنصر أخير جديد في كل مرة نقوم فيها بالتمرير لأسفل إلى أسفل الصفحة. إذا تم العثور عليه، فهذا يعني أننا لم نصل إلى نهاية الصفحة بعد، وعلينا مواصلة التمرير. إذا لم يتم العثور عليه، فهذا يعني أن الصفحة قد انتهت من التمرير لأسفل، ويمكننا الخروج من الحلقة.

إصلاح المشاكل المتكررة

بعض المشاكل التي تحدث بشكل متكرر عند القيام بالتمرير اللانهائي هي

  • يستغرق الأمر بعض الوقت للعثور على Xpath الصحيح للعنصر الأخير. تحتاج إلى التحقق من علامات الاقتباس المفردة والمزدوجة في نص js.
  • إذا كنت تحصل على عنصر غير محدد أو نفس العنصر الأخير في كل مرة، فأنت بحاجة إلى زيادة المدة الزمنية، أي زيادة time.sleep() لأن الصفحة قد لا يكون لديها الوقت الكافي للتحميل بالكامل. 
  • يمكنك التعليق على خيار مقطوع الرأس في get_selenium() إذا كان كل شيء صحيحًا، لكنه لا يزال لا يعمل.

تشغيل js داخل بايثون

من الممكن تشغيل نص برمجي js من داخل Python والحصول على قائمة كنتيجة لذلك. 

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

js_script = '''''\''        
var jslist = []  
document.querySelectorAll('img').forEach(i => jslist.push(i.src));
إرجاع jslist; 
 '' '   
python_list = selenium.execute_script(js_script)

في الكود أعلاه

  • أنشأنا مصفوفة فارغة تسمى jslist.
  • لقد حددنا جميع علامات img في الصفحة.
  • استخدمنا forEach لدفع كل img.src في مصفوفتنا.
  • أعدنا قائمة jslist.

يمكننا استخدام نفس النهج لروابط href من خلال:

  • تحديد جميع العلامات "أ".
  • دفع كل a.href إلى مصفوفتنا.

بعد ذلك، يمكننا بعد ذلك تشغيل البرنامج النصي باستخدام selenium.execute_script()، ويمكننا بعد ذلك تخزين القيمة التي تم إرجاعها بواسطة js في متغير بايثون أي python_slist. 

هكذا يمكننا كشط صفحات التمرير اللانهائي باستخدام Python.

استخدام وكيل

أنت تعلم أن الوكيل هو خادم تابع لجهة خارجية يعمل كوسيط بين العميل الذي يطلب موردًا ما والخادم الذي يوفر هذا المورد. إذا كنت تريد استخدام البروكسي مع سيلينيوم وبايثون، يمكنك استخدام الأسطر التالية من الشيفرة.

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('-proxy-server=%s'٪ اسم المضيف +":"+ منفذ)
برنامج التشغيل = webdriver.Chrome(chrome_options=chrome_options)

للتعامل مع التمرير اللانهائي، يمكنك استخدام scroll-proxy الذي يدعم التمرير البرمجي للعرض القابل للتمرير ضمن التسلسل الهرمي للعرض. إذا كنت تستخدم npm، يمكنك تثبيت scroll-proxy باستخدام الأمر أدناه. سنستخدم js لتوضيح استخدام scroll-proxy.

npm install scroll-proxy- حفظ - حفظ

بعد تثبيت Scroll-proxy، يمكنك إنشاء كائن ScrollProxy باستخدام الشيفرة أدناه.

var myScroll = ScrollProxy() جديد ScrollProxy();

يمكنك أن ترى أننا لم نمرر أي وسيطات إلى مُنشئ ScrollProxy لأنه سيبلغ عن الإجراءات افتراضيًا عندما يقوم المستخدم بتمرير الصفحة.

ومع ذلك، إذا كنت تريد الحصول على تحديثات عندما يقوم المستخدم بالتمرير داخل عنصر HTML معين، فعليك تمريره إلى المنشئ.

var myDiv = document.querySelector('.scrollable');
متغير myDivScroll = ScrollProxy(myDiv) جديد ScrollProxy(myDiv);

لماذا نستخدم البروكسيات للتمرير اللانهائي؟

فيما يلي بعض الأسباب لاستخدام البروكسيات أثناء إلغاء التمرير اللانهائي.

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

الخاتمة

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

آمل أن تكون قد فهمت كيفية كشط صفحات التمرير اللانهائي باستخدام Python.