In this Article
سواء كنت تعمل على فكرتك الخاصة أو على مشروع لشركة، فالبيانات هي العنصر الذي تحتاج إليه. عند بدء مشروع جديد أو تطوير استراتيجية لنشاط قائم، تحتاج إلى تحليل كم كبير من البيانات. ويساعد هذا التحليل على صياغة الحلول بطرق متنوعة بناء على مجموعة البيانات وبيان المشكلة. وهنا يأتي دور تجريف الويب.
يدفع التركيز المتزايد على تحليل سلوك العملاء مزيدا من شركات البيع بالتجزئة إلى استخدام تقنيات تجريف الويب، ولا سيما استخراج البيانات. ومن الأنشطة المهمة التي ينبغي لكل شركة تنفيذها مراقبة أسعار المنافسين وتوفر المنتجات ومراجعات العملاء.
في هذا الدليل، سنوضح كيفية البدء بتجريف الويب باستخدام Python لتحليل بيانات منتجات Amazon بصورة أفضل.
الإعداد الأولي: ما الذي ينبغي تنزيله؟
قبل أن نبدأ تجريف صفحات Amazon باستخدام Python، لنتأكد من أن بيئتك معدة على نحو صحيح. إذا لم يكن Python 3.x مثبتا على حاسوبك، فيمكنك تنزيله من https://www.python.org/.
- Visual Studio Code (VS Code)
لتشغيل جميع الأوامر اللازمة، يمكنك استخدام محطة الطرفية في Visual Studio Code (VS Code). ما عليك سوى تنزيل VS Code من الموقع الرسمي واتبع تعليمات التثبيت الخاصة بنظام التشغيل لديك.
لإعداد بيئة Python لديك:
- Open VS Code وinstall the Python extension by clicking the square icon in the sidebar.
إذا لم يكن Python مثبتا لديك، فسترى غير موجود: python. إذا كان كل شيء يعمل، فسترى الإصدار الحالي كما هو موضح أدناه.
أنشئ مجلدا جديدا للمشروع:
- في VS Code، افتح المجلد الذي تريد إنشاء مشروعك فيه باختيار ملف – فتح مجلد. أنشئ ملف Python جديدا للنص البرمجي، مثل amazon_scraper.py
ثبت مكتبتين تابعتين لجهات خارجية من أجل Python
في هذه الخطوة، سنحتاج إلى تثبيت pip. Pip، المعروف أيضا باسم pip3، وهو نظام لإدارة الحزم في Python يستخدم لتثبيت حزم البرمجيات وإدارتها.
- بعد فتح محطة الطرفية، يمكنك تثبيت المكتبات اللازمة باستخدام pip، وهو مثبّت الحزم لـ Python. لذا تحقق مما إذا كان لديك pip مثبت بالفعل:
*لتثبيت pip يمكنك استخدام Ensurepip، اكتب أحد هذه الأوامر في محطة الطرفية:
python -m ensurepip
python3 -m ensurepip
- استخدم الآن pip لتثبيت المكتبات اللازمة. نحتاج إلى “requests”, “beautifulsoup4”, “pandas”, “lxml” و“html5lib”.
pip3 install requests
pip3 install beautifulsoup4
pip3 install pandas
pip3 install lxml
pip3 install html5lib
لماذا نحتاج إلى هذه المكتبات؟
-
- Requests: باستخدام هذه المكتبة، يمكننا إنشاء اتصالات HTTP بصفحة Amazon. وستساعدنا على استخراج محتوى HTML الخام من الصفحة المستهدفة.
- Beautiful Soup: تساعدنا هذه الأداة القوية على استخراج البيانات المطلوبة من HTML الخام باستخدام مكتبة Requests.
- Pandas: تستخدم لمعالجة البيانات وتحليلها، ويمكنك تنظيم البيانات المجلوبة في DataFrames لإجراء تحليل فعال وتصديرها إلى تنسيقات متعددة مثل CSV.
- lxml: a powerful library for quick parsing XML وHTML documents.
- html5lib: مكتبة Python خالصة لتحليل HTML تتبع مواصفة HTML5.
تجريف عناصر المنتج
لنبدأ العملية الرئيسية. من بين جميع المعلومات المتاحة على موقع Amazon، سنركز على تجريف العناصر التالية:
- اسم المنتج؛
- التقييم؛
- السعر؛
- الصور؛
- الوصف.
اخترنا لهذا الدليل المنتج التالي: https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY
إرسال طلب إلى صفحة المنتج
*قبل إرسال طلب، علينا أيضا استيراد المكتبات التي ثبتناها مؤخرا:
import requests
from bs4 import BeautifulSoup
import pandas as pd
في هذه الخطوة، سنرسل طلب HTTP إلى URL صفحة منتج Amazon لاسترداد محتوى HTML الخاص بها. باستخدام مكتبة Requests، يمكنك محاكاة طلب متصفح ويب للوصول إلى صفحة الويب. أدرج ترويسات مناسبة مثل User-Agent لمحاكاة متصفح حقيقي ومنع فشل الاتصال. ثم تخزن استجابة الخادم، التي تتضمن محتوى HTML للصفحة، لمزيد من المعالجة واستخراج البيانات.
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept-Language': 'en-US, en;q=0.5'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')
اسم المنتج
- الموضع
عندما نقوم بـ فحص العنوان، سنجد أن نص العنوان موجود داخل وسم h1 الذي يحمل المعرف title. لنعد إلى ملفنا ونكتب الشيفرة لاستخراج هذه المعلومات من Amazon.
- اجلب اسم المنتج
سنستخرج اسم المنتج من محتوى HTML لصفحة منتج Amazon. باستخدام مكتبة BeautifulSoup، نحلل محتوى HTML ونحدد العنصر الذي يحمل اسم المنتج باستخدام وسم HTML وسماته. وبعد العثور على العنصر، نستخرج المحتوى النصي، غالبا باستخدام أساليب مثل find() أو find_all() مع محددات CSS أو تعبيرات XPath. وأخيرا، ينسق اسم المنتج المستخرج حسب الحاجة قبل الخطوة التالية.
*باستخدام سمة text يمكننا استخراج المعلومات من النص.
product_name_element = soup.find('span', {'id': 'productTitle'})
product_name = product_name_element.text.strip()
print('Product Name:', product_name)
بعد تشغيل هذه الشيفرة، ستكون لدينا النتيجة التالية في محطة الطرفية:
صور المنتج
- الموضع
لتجريف صور المنتج من صفحة منتج Amazon، تحتاج إلى تحديد عناصر HTML التي تحتوي على URL للصور. في صفحات منتجات Amazon، تخزن الصور غالبا ضمن وسوم ‘img’‘. ومن الفئات الشائعة للصور الديناميكية على Amazon ‘a-dynamic-image’.
- اجلب صور المنتج
استخدم BeautifulSoup لتحليل محتوى HTML المسترد من الطلب. استخرج السمة ‘src’‘ من كل وسم ‘img’‘، والتي تحتوي على URL الخاص بالصورة.
image_tags = soup.find_all('img', {'class':'a-dynamic-image'})
product_images = [img['src'] for img in image_tags]
print('Product Images:', product_images)
*قد تواجه أحيانا بعض المشكلات في الحصول على النتائج المطلوبة بعد كتابة هذه الشيفرة. إذا ظهرت 0 صورة، فمن الأفضل فحص بنية HTML والتأكد من العثور على الفئة والسمة الصحيحتين. في هذه الحالات، يمكنك تجربة هذه الشيفرة:
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
image_tags = soup.find_all('img')
product_images = []
for img_tag in image_tags:
image_url = img_tag.get('src')
if image_url:
product_images.append(image_url)
print('Product Images:', product_images)
else:
print(f"Request failed with status code: {response.status_code}")
سيعيد هذا جميع صور المنتج عالية الدقة في قائمة.
*تتضمن صفحات منتجات Amazon غالبا صورا متعددة لمنتج واحد. التقط كل الصور ذات الصلة بمعالجة جميع العناصر في القائمة.
تقييم المنتج
- الموضع
يمكنك العثور على التقييم في أول وسم ‘وسم i’ الذي يحمل الفئة ‘a-icon-alt’.
*تأكد من تعديل اسم الفئة وفقا لبنية HTML المحددة لصفحة منتج Amazon التي تجرفها. إذا كان اسم الفئة مختلفا، فستحتاج إلى استبدال ‘a-icon-alt’ باسم الفئة الصحيح.
- اجلب تقييم المنتج
لاستخراج تقييم المنتج، حدد عنصر HTML الذي يمثل التقييم في صفحة منتج Amazon باستخدام السمة ‘class’‘، مثل ‘a-icon-alt‘. وبعد العثور عليه، استخرج المحتوى النصي للعنصر، الذي يمثل قيمة التقييم، ثم نظفه لمزيد من المعالجة.
product_rating = soup.find('span', {'class': 'a-icon-alt'}).text.strip()
print('Product Rating:', product_rating)
سترى النتيجة التالية:
سعر المنتج
- الموضع
لاستخراج سعر المنتج، سنحدد عنصر HTML الذي يعرض السعر، وتحديدا العنصر الموجود أسفل التقييم مباشرة. في صفحة منتج Amazon، يكون هذا السعر عادة داخل وسم ‘span’‘ الذي يحمل الفئة ‘a-price’‘. بعد تحديد هذا الوسم ‘span’‘، يمكنك الانتقال إلى أول وسم ‘span’‘ لاسترداد قيمة السعر الفعلية.
- اجلب سعر المنتج
في هذه الشيفرة، يخزن المتغير حاوية السعر عنصر ‘span’‘ الذي يحمل الفئة ‘a-price’‘، ويسترد السعر نص أول وسم ‘span’‘ الذي يحمل الفئة ‘a-offscreen’‘ الذي يحتوي على السعر.
product_price = soup.find('span', {'class': 'a-offscreen'}).text.strip()
print('Product Price:', product_price)
ستكون النتيجة:
وصف المنتج
- الموضع
لتجريف وصف المنتج من صفحة منتج Amazon، تحتاج إلى تحديد عناصر HTML التي تحتوي على الوصف. توجد أوصاف منتجات Amazon غالبا داخل وسم محدد ‘div’ أو ‘span’‘ الذي يحمل ‘id productDescription’‘. إذا لم يعثر على وسم ‘div’‘ المحدد، فإنه يفحص وسم ‘ul’‘ الذي يحمل الفئة ‘a-unordered-list a-vertical a-spacing-mini’ ‘ بحثا عن أوصاف بنقاط تعداد.
*تخزن تفاصيل الوصف داخل وسوم ‘tr’‘ التي تحمل الفئة ‘a-spacing-small’‘. وبعد العثور عليها، عليك إيجاد كلا وسمي ‘span’‘ أسفلها للعثور على النص.
-
اجلب وصف المنتج
بتشغيل هذا النص البرمجي، ستتمكن من استخراج وصف المنتج من قسم ‘feature-bullets’‘ في صفحة منتج Amazon. وهو قسم شائع يحتوي على نقاط تعداد تصف خصائص المنتج.
description_section = soup.find('div', {'id': 'feature-bullets'})
product_description = description_section.get_text(separator=' ').strip()
print('Product Description:', product_description)
ستحصل على النتيجة التالية:
بعد تجريف كل المعلومات المطلوبة، يمكنك تخزين البيانات في قاموس. ثم يمكنك تحويل هذا القاموس إلى pandas DataFrame for easier data manipulation وdisplay.
product_info = {
'Name': product_name,
'Rating': product_rating,
'Price': product_price,
'Images': product_images,
'Description': product_description
}
df = pd.DataFrame([product_info])
print(df)
الشيفرة الكاملة
يمكنك بسهولة تعديل الشيفرة لجمع مزيد من البيانات من صفحة منتج Amazon، مثل مراجعات العملاء وتفاصيل المنتج ومعلومات البائع. ومن خلال فحص بنية HTML، يمكنك ضبط الشيفرة لاستخراج هذه العناصر الإضافية. وقد يكون ذلك مفيدا للاستخدام الشخصي أو للدمج في تطبيق يتتبع أسعار Amazon ويساعد المستخدمين على العثور على أفضل العروض.
في الوقت الحالي، تبدو الشيفرة على هذا النحو. باتباع هذا الدليل خطوة بخطوة، يمكنك معرفة كيفية عمل كل جزء من الشيفرة وإجراء مزيد من التعديلات بما يناسب احتياجاتك المحددة.
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept-Language': 'en-US, en;q=0.5'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')
product_name_element = soup.find('span', {'id': 'productTitle'})
product_name = product_name_element.text.strip()
print('Product Name:', product_name)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
image_tags = soup.find_all('img')
product_images = []
for img_tag in image_tags:
image_url = img_tag.get('src')
if image_url:
product_images.append(image_url)
print('Product Images:', product_images)
else:
print(f"Request failed with status code: {response.status_code}")
product_rating = soup.find('span', {'class': 'a-icon-alt'}).text.strip()
print('Product Rating:', product_rating)
product_price = soup.find('span', {'class': 'a-offscreen'}).text.strip()
print('Product Price:', product_price)
image_tags = soup.find_all('img', {'class': 'a-dynamic-image'})
product_images = [img['src'] for img in image_tags]
print('Product Images:', product_images)
description_section = soup.find('div', {'id': 'feature-bullets'})
product_description = description_section.get_text(separator=' ').strip()
print('Product Description:', product_description)
product_info = {
'Name': product_name,
'Rating': product_rating,
'Price': product_price,
'Images': product_images,
'Description': product_description
}
df = pd.DataFrame([product_info])
print(df)
يعرض التنسيق الجدولي في وحدة تحكم Python أو محطة الطرفية عند تشغيل النص البرمجي. وبعد تشغيله، تطبع DataFrame مباشرة في محطة الطرفية، حيث يمكنك رؤية البيانات منظمة في صفوف وأعمدة.
نصائح لتجريف صفحات Amazon باستخدام Python:
- احترم شروط خدمة Amazon؛
- حلل HTML بعناية وأكمل الفحوصات الأمنية؛
- حدث الشيفرة بانتظام، إذ قد تتغير بنية صفحات Amazon؛
- استخدم ترويسات مناسبة مثل ‘User-Agent’ و’Accept-Language’؛
- استخدم بروكسي وتدوير IP.
جرّب DataImpulse لتجريف Amazon
عند استخدام بروكسي، ترسل الطلبات من عناوين IP مختلفة، كما لو أنها صادرة من أجهزة ومواقع ومناطق زمنية مختلفة. ولن تشك المواقع بك أو تطلب منك إدخال captcha أو تحظرك. معنا ستحصل على:
- بيانات محدثة؛
- تدوير IP، من دون عناوين IP محظورة؛
- معالجة مشكلات التحقق؛
- واجهات API سهلة الاستخدام تتكيف بسرعة مع التغييرات في بنية HTML لدى Amazon؛
- بنية تحتية قوية، مثالية لمشاريع التجريف الكبيرة؛
- دعم بشري على مدار الساعة طوال أيام الأسبوع.
تواصل معنا عبر [email protected] أو انقر زر “جرّب الآن في الزاوية العلوية اليمنى.
*هذا الدليل مخصص للأغراض التعليمية فقط، ويعرض القدرات التقنية. ومن المهم إدراك أن تجريف البيانات من Amazon يثير مخاوف تتعلق بشروط الاستخدام والمشروعية. وقد يؤدي التجريف غير المصرح به إلى عواقب خطيرة، منها الإجراءات القانونية وتعليق الحساب. تصرف دائما بحذر واتبع الإرشادات الأخلاقية.



















