شعار proxyscrape داكن

كشط الويب السريع: المزامنة والخيوط والعمليات في بايثون

بايثون, أدلة إرشادية, كشط, Apr-19-20245 دقائق للقراءة

تجريف الويب هو أسلوب لا يقدر بثمن بالنسبة للمطورين، حيث يتيح استخراج البيانات من المواقع الإلكترونية بطريقة آلية. ومع ذلك، فإنه يأتي مع مجموعة من التحديات الخاصة به، بما في ذلك إدارة عمليات الإدخال/الإخراج بفعالية، والتعامل مع حدود المعدل، وتجاوز تدابير مكافحة الكشط. في هذه المدونة، سنستكشف في هذه المدونة ثلاث طرق قوية لتحسين كفاءة كشط الويب: البرمجة غير المتزامنة (البرمجة غير المتزامنة)، وتعدد مؤشرات الترابط، وتعدد المعالجات، وكيف يمكن الاستفادة من هذه الأساليب في تسريع مهام استخراج البيانات بشكل كبير.

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

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

فيما يلي مثال بسيط يستخدم asyncio و aiohttp لإجراء كشط الويب غير المتزامن:

استيراد asyncio
استيراد aiohttp

async def fetch(url, session):
   مزامنة مع Session.get(url) كـ استجابة:
       العودة في انتظار الاستجابة.text()

مزامنة def main(urls):
   مزامنة مع aiohttp.ClientSession() كجلسة:
        المهام = [جلب(url، جلسة) لـ url في urls]
       العودة في انتظار asyncio.collect(*المهام)

عناوين url = ['http://example.com'، 'https://example.org']
حلقة = asyncio.get_event_loop()
النتائج = loop.run_until_complete(main(urls)))

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

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

إليك كيف يمكنك استخدام وحدة الترابط لكشط الويب المتزامن:

استيراد الترابط
طلبات الاستيراد
 
def fetch(url):
   طباعة(requests.get(url).text)
 
المواضيع = []
urls = ['http://example.com', 'https://example.org']
 
لـ url في urls
    مؤشر ترابط = thread.thread(target=fetch, args=(url,))
    مؤشرات الترابط.append(مؤشر ترابط)
    مؤشر الترابط.start()
 
للخيط في سلاسل الرسائل
    مؤشر الترابط.join()

تتضمن المعالجة المتعددة استخدام عمليات متعددة، بدلاً من سلاسل الرسائل، لتنفيذ المهام بالتوازي. تعتبر هذه الطريقة مثالية للمهام المرتبطة بوحدة المعالجة المركزية حيث يكون الحساب نفسه هو عنق الزجاجة.

اختر تعدد المعالجة بدلاً من تعدد مؤشرات الترابط عندما تتضمن مهام كشط الويب معالجة بيانات ثقيلة يمكن أن تستفيد من توزيعها عبر أنوية متعددة لوحدة المعالجة المركزية.

يمكن أن تؤدي المعالجة المتعددة إلى تسريع المهام المرتبطة بوحدة المعالجة المركزية بشكل كبير في كشط الويب من خلال الاستفادة من النوى المتعددة لاستخراج البيانات المتوازية.

يبدو استخدام وحدة Python متعددة المعالجة في Python لاستخراج البيانات المتوازية على النحو التالي:

من تجمع الاستيراد متعدد المعالجة
استيراد الطلبات
 
def fetch(url):
   إرجاع الطلبات.get(url).text
 
مع Pool(5) كـ p:
   طباعة(p.map(fetch, ['http://example.com', 'https://example.org']))

يعتمد الاختيار بين المزامنة وتعدد مؤشرات الترابط وتعدد المعالجة على احتياجاتك الخاصة في كشط الويب:

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