وصف المدون

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

استخراج بيانات المنتجات من موقع جوميا باستعمال بايثون

 

 

web scraping   هو عملية جمع المعلومات من الإنترنت. 

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


 

 مكتبات بايثون ل web scraping :

beautifulSoup 

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

selenium 

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

 

يوفر امتدادات لمحاكاة تفاعل المستخدم مع المتصفحات ، وخادم توزيع لتوسيع نطاق تخصيص المستعرض ، والبنية التحتية لتطبيقات مواصفات W3C WebDriver التي تتيح لك كتابة كود قابل للتبديل لجميع متصفحات الويب الرئيسية.

 

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

 

يجمع السيلينيوم بين بائعي المستعرضات والمهندسين والمتحمسين لمزيد من المناقشة المفتوحة حول أتمتة منصة الويب. ينظم المشروع مؤتمر سنوي لتعليم ورعاية المجتمع.

 

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

 requests 

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

scrapy 

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

استخراج بيانات المنتجات من موقع Jumia :

(الكود كامل على  GitHub في أسفل الصفحة )

سنعتمد على مكتبة beautifulSoup و requests و أيضا مكتبة pandas لتخزين البيانات .

 

import requests
from bs4 import BeautifulSoup
import pandas as pd

 

بعدها نقوم بإدخال رابط لموقع جوميا يحتوي على معلومات الهواتف ، ممكن إضافة أي رابط في موقع جوميا 

 

'url = 'https://www.jumia.ma/smartphones/?page=1

 

 

ثم ندخل dictionnary الذي سنخزن فيه البيانات بعد استخراجها لمتغير .

 

columns = {'name':[] , 'price':[], 'img url': []} 

 

بعدها ،  ننشئ كائن beautifulSoup و بمساعدة مكتبة requests نأخذ page.content  وهو محتوى HTML للرابط الذي أدخلناه من قبل .

 

r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")

 

"html.parser" تتأكد من أنك تستخدم المحلل اللغوي المناسب لمحتوى HTML.

 

في هذه المرحلة يجب التركيز جيدا ، لأننا سنبحث عن العناصر التي نريد استخراجها من الكود عن طريق class Name .

 

 

نبحث في الكود HTML فقط عن المحتوى الذي نريد استخراج منه البيانات ، ثم ننسخ ما بداخل class و إدخالها لوظيفة find() بالطريقة التالية :

  

ancher = soup.find('div',{'class' : '-paxs row _no-g _4cl-3cm-shs'})

 

في هذه الحالة وجدنا أن div هو العنصر الذي يضم كل البيانات التي نحتاجها لذلك أدخلنا div و class و ما يوجد بداخل class في الوظيفة find  .

 

هناك وظيفة أخرى لكائنات beautifulSoup تسمى find_all() ، نستعملها إذا كان العنصر متكرر أكثر من مرة ، سنستعمل هذه الوظيفة في المرحلة المقبلة .

 

يوجد داخل العنصر div كل البيانات التي نحتاجها، سنبحث عن هذا في الكود HTML .

 

 

نلاحظ أنه يوجد مجموعة من عناصر article داخل العنصر div الذي حددناه من قبل (كل article تمثل هاتف و بياناته في الموقع)، و داخل كل article يوجد البيانات التي نريدها التي هي اسم الهاتف و الثمن و الصورة.

سنستعمل وظيفة find_all() لتحديد كل عناصر article و استخراج ما بداخلها .

 

ancher = ancher.find_all('article' , {'class' : 'prd _fb col c-prd'})

 

بعدما حددنا كل العناصر article ، نبرمج حلقة لسحب البيانات من كل عنصر ، مع تحديد العناصر للمعلومة المراد استخراجها ب class  و إدخالها ل find كما فعلنا سابقا .

ثم نخزن كل البيانات في القاموس الذي عرفناه في أول الكود .  

:for pt in ancher
img=pt.find('a').find('div' , {'class' : 'img-c'}).find('img',{'class':'img'})
name = pt.find('a').find('div' , {'class' : 'info'}).find('h3' , {'class' : 'name'})
price = pt.find('a').find('div' , {'class' : 'info'}).find('div' , {'class' : 'prc'})

columns['name'].append(name.text)
columns['price'].append(price.text)
columns['img url'].append(img.get('data-src'))

 

الآن قبل حفظ البيانات في ملف اكسل ، ماذا لو أردنا سحب هذه البيانات من مجموعة من الصفحات أو كل الصفحات ، و هذا ما سنفعله الآن . 

لاحظوا جيدا أن الرابط ينتهي برقم الصفحة :

 


 

الآن كل ما علينا هو جعل الكود يقوم بتغيير الرقم كل مرة مع استخراج البيانات لكل صفحة ، سنقوم ببرمجة حلقة تفعل كل هذا ليصبح الكود بالشكل التالي :

 

import requests
from bs4 import BeautifulSoup
import pandas as pd

'=url = 'https://www.jumia.ma/smartphones/?page

columns = {'name':[] , 'price':[], 'img url': []}

:for page in range(1,10)
print('---', page, '---')
r = requests.get(url + str(page))
soup = BeautifulSoup(r.content, "html.parser")

ancher = soup.find('div',{'class' : '-paxs row _no-g _4cl-3cm-shs'}).find_all('article' , {'class' : 'prd _fb col c-prd'})

:for pt in ancher
img=pt.find('a').find('div' , {'class' : 'img-c'}).find('img',{'class':'img'})
name = pt.find('a').find('div' , {'class' : 'info'}).find('h3' , {'class' : 'name'})
price = pt.find('a').find('div' , {'class' : 'info'}).find('div' , {'class' : 'prc'})

columns['name'].append(name.text)
columns['price'].append(price.text)
columns['img url'].append(img.get('data-src'))

 

في الأخير نحفظ كل هذه البيانات في ملف اكسل بمساعدة مكتبة pandas  .

 

data = pd.DataFrame(columns)
data.to_excel('data.xlsx')

 

 النتيجة :


هناك استعمالات كثيرة لهذه البيانات مثلا : التسويق بالعمولة لموقع جوميا مع إضافة المنتجات لموقعك ، .....

 

الكود كامل على  GitHub 💻:

https://github.com/AyoubAllali1/web-scraping-Jumia

  

برمجة سعيدة  🔥🔥

 

تعديل المشاركة

هذا هو أحدث مقال.

ليست هناك تعليقات
إرسال تعليق

Back to top button