يحتوي النظام البيئي الشامل لبايثون على عدد لا يحصى من المكتبات التي تجعل عملية تجريف الويب مهمة واضحة، ومن المؤكد أن lxml هو أحد الخيارات الرئيسية. يهدف هذا البرنامج التعليمي إلى توفير دليل شامل حول سبب كون lxml خيارًا ممتازًا لتجريد الويب، وخطوات إنشاء أداة استخراج lxml قوية، وأمثلة عملية للبدء. يتضمن البرنامج التعليمي أيضًا رؤى قيمة لضمان الحد الأقصى لعدد الطلبات الناجحة أثناء تجريف الويب.
مقدمة إلى تجريف الويب باستخدام lxml في Python
يتضمن تجريف الويب باستخدام لغة Python lxml استخراج البيانات وتنظيمها من كود HTML أو XML الذي تم تنزيله. على عكس بعض المكتبات التي تتعامل مع التنزيل والتحليل، فإن lxml متخصص في التحليل. لتنزيل صفحات الويب، عادةً ما تستخدم عميل HTTP مثل الطلبات. بمجرد تنزيل بيانات HTML أو XML، يمكن لـ lxml بعد ذلك تحليل هذه البيانات، مما يسمح لك بالوصول إلى عناصر وسمات محددة بفعالية.
لماذا تختار لغة Python lxml لتجريد الويب؟
يأتي اختيار lxml لمشاريع تجريف الويب الخاصة بك مع العديد من الفوائد:
مزايا:
- القابلية للتوسعة: تم إنشاء lxml فوق مكتبات C libxml2 وlibxslt، وهو قابل للتوسعة بدرجة كبيرة ويوفر مزايا السرعة لمكتبة C الأصلية بالإضافة إلى بساطة Python.
- هيكل XML: يدعم ثلاث لغات مخطط لتحديد بنية XML وينفذ XPath بالكامل، مما يجعله قويًا بشكل لا يصدق للتنقل عبر العناصر في مستندات XML.
- اجتياز البيانات: قادر على التنقل عبر هياكل XML وHTML المختلفة، مما يسمح بالتنقل عبر الأطفال والأشقاء والعناصر الأخرى. تمنحه هذه الميزة ميزة على المحللين الآخرين مثل BeautifulSoup.
- كفاءة استخدام الموارد: تستهلك ذاكرة أقل مقارنة بالمكتبات الأخرى، مما يجعلها ذات كفاءة عالية في تحليل مجموعات البيانات الكبيرة.
ومع ذلك، فإن lxml ليس دائمًا الخيار الأفضل لتحليل HTML المكتوب بشكل سيئ أو المعطوب. في مثل هذه الحالات، يمكنك اللجوء إلى BeautifulSoup كخيار احتياطي.
خطوات بناء محلل lxml قوي في بايثون
الخطوة 1: اختر الأدوات المناسبة
قبل البدء في الكشط، ستحتاج إلى اختيار مجموعة الأدوات المناسبة. بالنسبة لعملاء HTTP، تقدم Python مكتبات مثل Requests
, HTTPX
، و aiohttp
. إذا كان هدفك هو موقع ويب ديناميكي يعتمد على JavaScript، فقد تحتاج أيضًا إلى متصفح بدون رأس مثل السيلينيوم.
الخطوة 2: تحديد صفحة الويب المستهدفة الخاصة بك
بعد إعداد أدواتك، حدد صفحة الويب التي تريد مسحها. تأكد من قراءة الموقع robots.txt
لمعرفة قواعد تجريف الويب على هذا الموقع.
الخطوة 3: فهم إرشادات تجريف الويب
يعد فهم أفضل ممارسات استخراج الويب والحواجز المحتملة مثل اختبار CAPTCHA أو حظر IP أمرًا بالغ الأهمية. في الحالات التي تتوقع فيها مثل هذه المشكلات، قد يكون استخدام خادم وكيل دوار مفيدًا.
الخطوة 4: إعداد الرؤوس
تساعد رؤوس HTTP في محاكاة سلوك المستخدم الفعلي. قم بإعدادها بشكل صحيح للتأكد من عدم حظر مكشطة الخاص بك.
تجريف الويب باستخدام lxml الخاص ببايثون: برنامج تعليمي خطوة بخطوة
المتطلبات الأساسية
قبل البدء، ستحتاج إلى ما يلي:
- بايثون 3.x: تأكد من تثبيت Python 3.x على نظامك. يمكنك تنزيله من الموقع الرسمي لبيثون.
- محرر الكود: أي محرر نصوص يدعم Python سيفي بالغرض، على الرغم من أن بيئة التطوير المتكاملة المتقدمة مثل Visual Studio Code أو Notepad++ أو PyCharm يمكن أن توفر المزيد من الوظائف مثل تصحيح الأخطاء وتمييز بناء الجملة والإكمال التلقائي.
- الطلبات ومكتبات lxml: هذه مكتبات Python تابعة لجهات خارجية تُستخدم لطلبات HTTP وتحليل HTML، على التوالي. للتثبيت، افتح الجهاز الطرفي الخاص بك وقم بتشغيل:
pip install requests lxml
1. إعداد بيئة التطوير الخاصة بك
توضيح:
في هذه الخطوة، تقوم بإعداد بيئة البرمجة الخاصة بك للتطوير. اختر موقعًا على جهاز الكمبيوتر الخاص بك حيث تريد حفظ البرنامج النصي الخاص بك.
- إنشاء ملف بايثون: افتح محرر التعليمات البرمجية الخاص بك وقم بإنشاء ملف Python جديد باسم
imdb_scraper.py
.
2. جلب محتوى صفحة الويب
شفرة:
import requests
url = "https://www.imdb.com/chart/moviemeter/"
response = requests.get(url)
if response.status_code == 200:
page_content = response.text
else:
print("Failed to retrieve the page")
توضيح:
في هذا القسم، يمكنك جلب محتوى HTML لصفحة الأفلام الأكثر شهرة على موقع IMDb.
- استيراد
requests
: الrequests
يتم استخدام المكتبة لتقديم طلبات HTTP. - جلب المحتوى:
requests.get(url)
جلب محتوى صفحة الويب وتخزينه في ملفresponse
عامل. - التحقق من رمز الحالة: من الممارسات الجيدة التحقق من رمز حالة HTTP (200 يعني موافق). إذا لم يكن 200، فهناك مشكلة في جلب الصفحة.
3. تحليل صفحة الويب
شفرة:
from lxml import html
tree = html.fromstring(page_content)
توضيح:
هنا يمكنك تحويل محتوى HTML الذي تم جلبه إلى بنية شجرة قابلة للبحث.
- استيراد
lxml.html
: تساعد هذه الوحدة على إنشاء بنية شجرة من محتوى HTML. - إنشاء هيكل الشجرة:
html.fromstring(page_content)
يوزع محتوى HTML المخزن فيهpage_content
ويقوم بإنشاء بنية تشبه الشجرة والتي تقوم بتخزينها في المتغيرtree
.
4. استخراج البيانات
شفرة:
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
توضيح:
الآن بعد أن أصبح لديك هيكل يشبه الشجرة لصفحة الويب، يمكنك البحث عن البيانات واستخراجها منها.
- باستخدام XPath: XPath هي لغة استعلام يمكنها التنقل عبر مستند XML. يمكنك استخدامه هنا لتحديد العناصر والسمات التي تريد استخلاصها.
- استخراج العناوين والتقييمات: تقوم بجمع عناوين الأفلام وتقييمات IMDb باستخدام استعلامات XPath التي تحدد مواقعها في بنية HTML.
5. تخزين البيانات
شفرة:
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
توضيح:
وأخيرًا، ستحتاج إلى تخزين البيانات المسروقة أو عرضها.
- قوائم الضغط: ال
zip
تقوم الوظيفة بربط كل عنوان فيلم بالتصنيف المقابل له. - بيانات الطباعة: في هذا المثال، نقوم ببساطة بطباعة كل زوج. في تطبيق العالم الحقيقي، قد ترغب في تخزين هذه البيانات في قاعدة بيانات أو ملف.
مثال الكود الكامل
# Importing required libraries
import requests
from lxml import html
# Step 2: Fetch Web Page Content
url = "https://www.imdb.com/chart/moviemeter/"
response = requests.get(url)
if response.status_code == 200:
page_content = response.text
else:
print("Failed to retrieve the page")
# Step 3: Parse the Web Page
tree = html.fromstring(page_content)
# Step 4: Extract Data
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
# Step 5: Store and/or Output Data
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
باتباع هذا البرنامج التعليمي الموسع والمفصل، يجب أن تكون قادرًا على استخراج المعلومات بثقة حول الأفلام الأكثر شهرة من IMDb. كما هو الحال دائمًا، من الضروري احترام شروط الخدمة الخاصة بأي موقع ويب تقوم بنسخه.
الملاحظات الختامية
يمكن أن يكون تجريف الويب عملية معقدة، لكن مكتبة Python lxml تبسط العديد من التعقيدات. باستخدام الأدوات المناسبة ومعرفة أفضل الممارسات والاستراتيجية المحددة جيدًا، يمكنك جعل مساعي تجريف الويب الخاصة بك فعالة وناجحة. يهدف هذا البرنامج التعليمي إلى تغطية هذه الجوانب بشكل شامل. تجريف سعيد!