شعار proxyscrape داكن

مقدمة في تحليل الويب في بايثون مع بارسل

بايثون, يناير-03-20255 دقائق للقراءة

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

مقدمة إلى بارسيل

ما هو تحليل الويب ولماذا هو مهم؟

Parsel هي مكتبة Python خفيفة الوزن مصممة لتحليل HTML/XML واستخراج البيانات. صُممت Parsel مع وضع كشط الويب في الاعتبار، وهي تسهّل التفاعل مع هياكل صفحات الويب باستخدام محددات قوية مثل XPath و CSS. تتيح لك هذه الأدوات تحديد واستخراج عناصر أو سمات محددة من صفحات الويب بدقة. إن تكامل Parsel مع النظام البيئي ل Python يعني أيضًا أنه يعمل بسلاسة مع مكتبات مثل "الطلبات" و "httpx" لجلب محتوى الويب.

الميزات الرئيسية لبارسل

  • دعم المحددات: استخدم XPath للتنقل التفصيلي للمسار أو محددات CSS لصياغة أبسط.
  • المرونة: يدعم العديد من مهام تحليل HTML/XML، بدءًا من الاستخراج البسيط للنص إلى التعامل مع العناصر المتداخلة العميقة.
  • قابلية التوسع: يمكن ل Parsel استخراج البيانات من صفحة واحدة أو صفحات متعددة عبر هياكل التكرار.
  • التكامل مع Scrapy: يمتد توافق Parsel بشكل طبيعي إلى Scrapy، وهو إطار عمل شائع لكشط الويب.

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

  • كشط الويب: استخراج البيانات من مواقع التجارة الإلكترونية لمراقبة الأسعار.
  • التنقيب عن البيانات: جمع معلومات الاتصال أو بيانات البحث من السجلات العامة.
  • الأتمتة: تبسيط المهام المتكررة مثل تنزيل مواصفات المنتج.

فهم المحددات وتحليل HTML

ما هو تحليل HTML؟

تحليل HTML هو عملية تحليل مستند HTML إلى مكوناته الهيكلية، مثل العلامات والسمات ونموذج كائن المستند (DOM). يستخدم التحليل هذه البنية لتحديد موقع البيانات التي تحتاجها واستخراجها بدقة.

يتم إنشاء مستندات HTML باستخدام:

  • العلامات: تحديد نوع العنصر (على سبيل المثال., <h1>, <p>, <img>).
  • السمات: توفير معلومات إضافية حول عنصر ما (على سبيل المثال, الهوية, الفئة, التكريم).
  • DOM: تمثيل هرمي لصفحة الويب، والذي يتيح التنقل بين العناصر.

ما هي المحددات؟

محددات XPath و CSS هي لغات استعلام تُستخدم لتحديد العناصر في مستند HTML:

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

اقرأ المزيد عن المختارين هنا.

المتطلبات الأساسية

قبل البدء في استخدام بارسيل، تأكد مما يلي:

  • تثبيت بايثون: قم بتنزيل Python وتثبيته من
  • تثبيت المكتبات المطلوبة(بارسيل، طلبات): 
طلبات تثبيت طلبات بارسيل

تقنيات التحليل التحليلي لتحليل HTML

استخراج العناصر حسب المعرف والفئة

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

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

فيما يلي مثال على بنية HTML الخاصة به:

من هذا العنصر، سنستخرج:

  • عنوان الكتاب
  • سعر الكتاب
  • حالة التوفر

مثال على كود بايثون

استيراد الطلبات
من بارسيل استيراد المحدد

# جلب صفحة الويب
عنوان url = "https://books.toscrape.com/"
الاستجابة = طلبات.get(url)
محدد = محدد (نص الاستجابة)

# حدد المنتج الأول حسب الفئة
المنتج = Selector.css("article.product_pod").get()

# تحليل التفاصيل من المنتج المحدد
محدد_المنتج = محدد(نص=منتج)
العنوان = product_selector.css("h3 a::attr(title)").get()
السعر = product_selector.css("p.price_color::text").get()
التوافر = product_selector.css("p.instock.availability::text").get().strip()

طباعة("العنوان:"، العنوان)
طباعة("السعر:"، السعر)
طباعة("التوفر:"، التوفر)

شرح السيناريو:

  • أحضر صفحة الويب: يرسل البرنامج النصي احصل على إلى موقع الويب النموذجي لاسترداد محتوى HTML الخاص به.
  • حدد كتلة المنتج: يستخدم محدد CSS المادة.المنتج_بود لتحديد إدخال الكتاب الأول من الصفحة.
  • تحليل تفاصيل المنتج: يستخرج البرنامج النصي العنوان, السعرو التوافر من خلال استهداف علامات وسمات HTML وسمات معينة داخل المنتج_بود كتلة.
  • عرض النتائج: تتم طباعة البيانات المستخرجة إلى وحدة التحكم بتنسيق قابل للقراءة.

مثال على المخرجات

العنوان: ضوء في العلية
السعر: 51.77جنيه إسترليني
متوفر متوفر في المخزن

استخراج النص من العناصر

يجعل Parsel من السهل استخراج النص من عناصر HTML، سواء كان عنوانًا أو وصفًا أو أي محتوى مرئي آخر على صفحة ويب.

للتوضيح، سنستخدم نفس مثال على الموقع الإلكتروني مرة أخرى. سوف نركز على استخراج نص عنوان كتاب واحد باستخدام h3 متداخلة داخل عنصر مقالة مع الفئة المنتج_بود.

فيما يلي مثال على بنية HTML الخاصة به:

من هذا العنصر، سنستخرج:

  • نص عنوان الكتاب

مثال على كود بايثون

استيراد الطلبات
من بارسيل استيراد المحدد

# جلب صفحة الويب
عنوان url = "https://books.toscrape.com/"
الاستجابة = طلبات.get(url)
محدد = محدد (نص الاستجابة)

# حدد المنتج الأول حسب الفئة
المنتج = Selector.css("article.product_pod").get()

# تحليل نص العنوان من المنتج المحدد
مُحدِّد_المنتج = مُحدِّد(نص=منتج)

نص العنوان = product_selector.css("h3 a::attr(title)").get()
طباعة("نص العنوان:", title_text)

شرح السيناريو:

  • أحضر صفحة الويب: يرسل البرنامج النصي احصل على طلب استرداد محتوى HTML من الموقع الإلكتروني.
  • حدد كتلة المنتج: المقالالمنتج_بود يستهدف محدِّد CSS مُحدِّد CSS إدخال الكتاب الأول.
  • استخرج نص العنوان: استخدام h3 a::attr(العنوان)، يسحب البرنامج النصي سمة العنوان من <a> متداخلة في علامة <h3> الوسم.
  • عرض النتيجة: تتم طباعة العنوان المستخرج إلى وحدة التحكم.

مثال على المخرجات

نص العنوان: ضوء في العلية

استخراج السمات (مثل "المرجع"، "src"، "src"، "alt")

يسمح لنا Parsel أيضًا باستخراج قيم السمات، مثل href أو src أو alt، من عناصر HTML. غالبًا ما تحتوي هذه السمات على بيانات قيّمة مثل عناوين URL أو مصادر الصور أو النص الوصفي.

سنركز على استخراج الرابط (التكريم) إلى صفحة تفاصيل الكتاب من <a> علامة داخل علامة المقال مع الفئة المنتج_بود.

فيما يلي مثال على بنية HTML الخاصة به:

من هذا العنصر، سنستخرج:

  • الرابط (التكريم) إلى صفحة تفاصيل الكتاب

مثال على كود بايثون

استيراد الطلبات
من بارسيل استيراد المحدد

# جلب صفحة الويب
عنوان url = "https://books.toscrape.com/"
الاستجابة = طلبات.get(url)
محدد = محدد (نص الاستجابة)

# حدد المنتج الأول حسب الفئة
المنتج = Selector.css("article.product_pod").get()

# قم بتحليل سمة "href" من المنتج المحدد
محدد_المنتج = المحدد(نص=منتج)
book_link = product_selector.css("h3 a::attr(href)").get()

طباعة("رابط الكتاب:", book_link)

شرح السيناريو:

  • جلب صفحة الويب: يرسل البرنامج النصي طلب GET لاسترداد محتوى HTML من موقع الويب.
  • حدِّد مكوِّن المنتج: يستهدف مُحدِّد CSS article.product_pod CSS مُحدِّد المقالة.product_pod CSS أول إدخال كتاب.
  • استخرج سمة href: باستخدام h3 a::attr(href)، يسحب البرنامج النصي قيمة href من العلامة المتداخلة في العلامة.
  • عرض النتيجة: تتم طباعة عنوان URL المستخرج إلى وحدة التحكم.

مثال على المخرجات

رابط الكتاب: catalogue/a-light-in-the-attic_1000/index.html

استخراج قوائم العناصر

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

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

فيما يلي مثال على بنية HTML ذات الصلة:

من هذه العناصر، سنستخرج:

  • عناوين جميع الكتب المعروضة على الصفحة الرئيسية

مثال على كود بايثون

استيراد الطلبات
من بارسيل استيراد المحدد

# جلب صفحة الويب
عنوان url = "https://books.toscrape.com/"
الاستجابة = طلبات.get(url)
محدد = محدد (نص الاستجابة)

# حدد جميع عناوين الكتب
book_titles = selector.css("article.product_pod h3 a::attr(title)").getall()

# اطبع كل عنوان
للعنوان في book_titles:
   طباعة("العنوان:"، العنوان)

شرح السيناريو:

  • أحضر صفحة الويب: يرسل البرنامج النصي احصل على طلب استرداد محتوى HTML من الموقع الإلكتروني.
  • اختر جميع العناوين: استخدام CSS محدد مقالة.product_pod_pod h3 a::attr(title)، فإنه يحدد كل <a> العلامات بالداخل <h3> العلامات داخل المنتج_بود العناصر.
  • مقتطفات من العناوين: إن .getall() استرجاع قائمة بجميع العناوين المطابقة.
  • عرض النتائج: تتم طباعة كل عنوان في القائمة واحداً تلو الآخر.

مثال على المخرجات

العنوان: ضوء في العلية
العنوان: ضوء في العلية قلب المخمل
العنوان: "إكراميات العنوان: Soumission
العنوان أشياء حادة

التنقل بين العناصر المتداخلة

يتيح Parsel التنقل الفعال في هياكل HTML المعقدة والمتداخلة باستخدام محددات CSS و XPath. هذا الأمر ذو قيمة خاصة عند استخراج البيانات المدفونة في طبقات متعددة من علامات HTML.

سنقوم باستخراج سعر الكتاب من داخل المنتج_بود العنصر.

فيما يلي مثال على بنية HTML ذات الصلة:

من هذه البنية المتداخلة سنستخرج:

  • سعر الكتاب الأول

مثال على كود بايثون

استيراد الطلبات
من بارسيل استيراد المحدد

# جلب صفحة الويب
عنوان url = "https://books.toscrape.com/"
الاستجابة = طلبات.get(url)
محدد = محدد (نص الاستجابة)

# حدد المنتج الأول حسب الفئة
المنتج = Selector.css("article.product_pod").get()

# تحليل عنصر السعر المتداخل
محدد_المنتج = محدد(نص=منتج)
السعر = Product_selector.css("div.product_price p.price_color::text").get()

طباعة("السعر:"، السعر)

شرح السيناريو:

  • جلب صفحة الويب: يسترجع البرنامج النصي محتوى HTML لصفحة الويب باستخدام الطلبات.
  • حدد كتلة المنتج الأول: يستهدف علامة المقالة الأولى مع الفئة المنتج_بود.
  • انتقل إلى عنصر السعر المتداخل: استخدام CSS محدد div.product_price p.price_color، فإنه ينتقل إلى القسم ويحدد p علامة تحتوي على السعر.
  • استخرج نص السعر: إن .get() استرداد قيمة السعر.
  • عرض النتيجة: تتم طباعة السعر المستخرج.

مثال على المخرجات

السعر: 51.77جنيه إسترليني

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

يعمل Parsel على تبسيط عملية استخراج البيانات المنظمة من قوائم HTML والتنسيقات الشبيهة بالجداول. غالبًا ما تعرض مواقع الويب المعلومات في أنماط متكررة، مثل شبكات المنتجات أو القوائم المرتبة، مما يجعل Parsel أداة أساسية لالتقاط هذه البيانات بكفاءة.

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

فيما يلي مثال على بنية HTML ذات الصلة:

من هذا الهيكل، سنستخرج:

  • عنوان كل كتاب
  • سعر كل كتاب

مثال على كود بايثون

import requests
from parsel import Selector

# Fetch the webpage
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)

# Select all book items in the list
books = selector.css("ol.row li.article")

# Loop through each book and extract title and price
for book in books:
    title = book.css("h3 a::attr(title)").get()
    price = book.css("p.price_color::text").get()
    print(f"Title: {title} | Price: {price}")

شرح السيناريو:

  • جلب صفحة الويب: يرسل البرنامج النصي طلب GET لجلب محتوى HTML من موقع الويب.
  • حدد جميع عناصر الكتاب: المحدد صف أول مقالة تستهدف جميع <li> عناصر داخل القائمة المرتبة (<ol>)، والتي تمثل عناصر الكتب الفردية.
  • عنوان المستخرج والسعر: h3 a::attr(العنوان) يستخرج سمة العنوان من <a> الوسم --- p.price_color::text يستخرج نص السعر من <p> الوسم.
  • عرض النتائج: يطبع البرنامج النصي عنوان كل كتاب وسعره.

مثال على المخرجات

العنوان: A خفيف في العلية العلية | السعر £51.77
العنوان البقشيش ال المخمل | السعر £53.74
العنوان Soumission | السعر £50.10
العنوان شارب أغراض | السعر £47.82
...

الخاتمة

استكشفنا في هذا البرنامج التعليمي أساسيات تحليل الويب في Python باستخدام Parsel. من فهم المحدِّدات الأساسية إلى التنقل بين العناصر المتداخلة واستخراج السمات وتحليل القوائم، أوضحنا كيف يبسّط Parsel عملية استخراج البيانات ذات المغزى من صفحات الويب.

فيما يلي ملخص سريع لما تناولناه:

  • استخراج العناصر حسب المعرف والفئة: عناصر HTML محددة مستهدفة باستخدام محددات CSS.
  • استخراج النص والسمات: تعلم كيفية سحب محتوى النص والسمات مثل href و src من العناصر.
  • التعامل مع العناصر المتداخلة: استكشاف كيفية التنقل عبر العلاقات بين الأصل والطفل في بنيات HTML.
  • تحليل القوائم: استخراج البيانات المنظمة المستخرجة من الأنماط المتكررة، مثل الجداول أو قوائم المنتجات.

الخطوات التالية:

  • جرّب صفحات الويب المختلفة وبنى HTML المعقدة باستخدام Parsel.
  • استكشف التكامل مع مكتبات أخرى مثل Scrapy لمشاريع كشط الويب على نطاق واسع.
  • اتبع أفضل الممارسات للتجريف الأخلاقي، مثل احترام ملفات robots.txt وتجنب التحميل الزائد على الخوادم .

يعد Parsel أداة قوية في مجموعة أدوات كشط الويب، وسيتيح إتقانها فرصًا لا حصر لها لجمع البيانات وتحليلها.

تحليل سعيد!