أصبح تجريف الويب مهارة أساسية لمطوري Python وعلماء البيانات وعشاق تجريف الويب. سواء كنت تقوم باستخراج البيانات للتحليل، أو إنشاء أداة لمقارنة الأسعار، أو أتمتة استخراج المحتوى، فإن تحليل الويب هو جوهر كل من هذه المهام. ولكن ما الذي يجعل تحليل الويب فعالاً وصديقاً للمبتدئين؟ أدخل Parsel - وهيمكتبة قوية في Python تبسط تحليل HTML واستخراج البيانات.
Parsel هي مكتبة Python خفيفة الوزن مصممة لتحليل HTML/XML واستخراج البيانات. صُممت Parsel مع وضع كشط الويب في الاعتبار، وهي تسهّل التفاعل مع هياكل صفحات الويب باستخدام محددات قوية مثل XPath و CSS. تتيح لك هذه الأدوات تحديد واستخراج عناصر أو سمات محددة من صفحات الويب بدقة. إن تكامل Parsel مع النظام البيئي ل Python يعني أيضًا أنه يعمل بسلاسة مع مكتبات مثل "الطلبات" و "httpx" لجلب محتوى الويب.
تحليل HTML هو عملية تحليل مستند HTML إلى مكوناته الهيكلية، مثل العلامات والسمات ونموذج كائن المستند (DOM). يستخدم التحليل هذه البنية لتحديد موقع البيانات التي تحتاجها واستخراجها بدقة.
يتم إنشاء مستندات HTML باستخدام:
<h1>
, <p>
, <img>
).الهوية
, الفئة
, التكريم
).محددات XPath و CSS هي لغات استعلام تُستخدم لتحديد العناصر في مستند 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 الخاص به.المادة.المنتج_بود
لتحديد إدخال الكتاب الأول من الصفحة.المنتج_بود
كتلة.العنوان: ضوء في العلية
السعر: 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>
الوسم.نص العنوان: ضوء في العلية
يسمح لنا 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)
شرح السيناريو:
رابط الكتاب: 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 من الموقع الإلكتروني. مقالة.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()
طباعة("السعر:"، السعر)
شرح السيناريو:
المنتج_بود
.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}")
صف أول
مقالة
تستهدف جميع <li> عناصر داخل القائمة المرتبة (<ol>)، والتي تمثل عناصر الكتب الفردية.h3 a::attr(العنوان)
يستخرج سمة العنوان من <a>
الوسم --- p.price_color::text
يستخرج نص السعر من <p>
الوسم.العنوان: A خفيف في العلية العلية | السعر £51.77
العنوان البقشيش ال المخمل | السعر £53.74
العنوان Soumission | السعر £50.10
العنوان شارب أغراض | السعر £47.82
...
استكشفنا في هذا البرنامج التعليمي أساسيات تحليل الويب في Python باستخدام Parsel. من فهم المحدِّدات الأساسية إلى التنقل بين العناصر المتداخلة واستخراج السمات وتحليل القوائم، أوضحنا كيف يبسّط Parsel عملية استخراج البيانات ذات المغزى من صفحات الويب.
فيما يلي ملخص سريع لما تناولناه:
يعد Parsel أداة قوية في مجموعة أدوات كشط الويب، وسيتيح إتقانها فرصًا لا حصر لها لجمع البيانات وتحليلها.
تحليل سعيد!