انتقل إلى المحتوى

الدليل النهائي للتخلص من Amazon باستخدام Python (2023)

يمكن أن يوفر استخراج البيانات من Amazon ، أحد أكبر منصات التجارة الإلكترونية ، رؤى قيمة. سواء كنت تبحث عن مقارنة الأسعار أو تحليل مراجعات العملاء أو تتبع مدى توفر المنتج ، يمكن أن يكون تجريف الويب أداة مفيدة. يوفر هذا الدليل إرشادات مفصلة وأمثلة على كود Python لتخليص Amazon.

أخلاقيات تجريف الويب

قبل الغوص ، من المهم ملاحظة أن الكشط يجب أن يتم بشكل مسؤول لتقليل الطلب على خوادم موقع الويب. تتمثل إحدى طرق القيام بذلك في التركيز على صفحة Amazon Search حيث يمكنك استخراج بيانات المنتج الأساسية مثل الاسم والسعر وعنوان URL للصورة والتقييم وعدد المراجعات. سيؤدي هذا النهج إلى تقليل عدد الطلبات التي تحتاج إلى تقديمها إلى Amazon بشكل كبير ، مما يجعل تشغيل مكشطة أسرع وأرخص.

مكتبات كشط ويب بايثون

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

  1. الطلبات: مكتبة Python مشهورة لإجراء طلبات HTTP. إنه يلخص تعقيدات تقديم الطلبات خلف واجهة برمجة تطبيقات بسيطة ، مما يسمح لك بإرسال طلبات HTTP / 1.1 بطرق مختلفة مثل GET و POST وغيرها.
  2. شوربة جميلة: يستخدم لتحليل مستندات HTML و XML واستخراج البيانات. يقوم بإنشاء شجرة تحليل من التعليمات البرمجية المصدر للصفحة التي يمكن استخدامها لاستخراج البيانات بطريقة هرمية وأكثر قابلية للقراءة.
  3. Scrapy: إطار عمل Python مفتوح المصدر مصمم خصيصًا لكشط الويب. إنه إطار متعدد الاستخدامات يمكنه التعامل مع مجموعة واسعة من مهام الكشط وقادر على تجريف مجموعات البيانات الكبيرة.
  4. عنصر السيلينيوم: أداة قوية للتحكم في متصفح الويب من خلال البرنامج. إنه مفيد جدًا في تجريف الويب لأنه يمكنه التعامل مع جميع أنواع محتوى موقع الويب ، بما في ذلك المحتوى الذي تم إنشاؤه بواسطة JavaScript. كما يسمح بتفاعل المستخدم مثل النقر والتمرير وما إلى ذلك.
  5. جزء: يستخدم لاستخراج البيانات من HTML و XML باستخدام محددات XPath و CSS. إنه مبني على أعلى مكتبة lxml ، مما يجعلها مرنة وسهلة الاستخدام.

استخراج بيانات المنتج من صفحات بحث أمازون

تتمثل الخطوة الأولى في تجريف Amazon في استخراج البيانات من صفحات البحث. يمكن استخدام مكتبات طلبات Python و Parsel لهذه المهمة. في ما يلي مثال على البرنامج النصي الذي يقوم بكشط بيانات المنتج من جميع صفحات بحث Amazon المتاحة لكلمة رئيسية معينة (على سبيل المثال ، "iPad"):

طلبات الاستيراد من محدد استيراد parsel من urllib.parse import urljoin keyword_list = ['ipad'] product_overview_data = [] للكلمة الرئيسية في keyword_list: url_list = [f'https: //www.amazon.com/s؟ k = {keyword} & page = 1 '] لعنوان url في url_list: try: response = calls.get (url) if response.status_code == 200: sel = المحدد (text = response.text) # استخراج صفحة المنتج search_products = sel.css ("div .s-result-item [data-component-type = s-search-result] ") للمنتج في search_products: dynamic_url = product.css (" h2> a :: attr (href) "). get () asin = Relative_url.split ('/') [3] if len (dynamic_url.split ('/'))> = 4 else لا شيء product_url = urljoin ('https://www.amazon.com/'، النسبي_url) .split ( "؟") [0] product_overview_data.append ({"keyword": كلمة رئيسية ، "asin": asin ، "url": product_url ، "ad": True if "/ slredirect /" في product_url else False ، "العنوان": product.css ("h2> a> span :: text"). get ()، "price-data-a-size = xl .a-offscreen :: text"). get ()، "real_price": product. css (". a-price [data-a-size = b] .a-offscreen :: text"). get ()، "rating": (product.css ("span [aria-label ~ = stars]: : attr "rating_count": product.css ("span [aria-label ~ = stars] + span :: attr (aria-label)"). get ()، "thumbnail_url": product.xpath ("// img [ has-class ('s-image')] / @ src "). get ()،}) # Get All Pages if" & page = 1 "in url: available_pages = sel.xpath ('// a [has-class ("s-pagination-item")] [not (has-class ("s-pagination -eparator"))] / text () ') .getall () للصفحة في available_pages: search_url_paginated = f'https: // www.amazon.com/s؟k={keyword}&page={page} 'url_list.append (search_url_paginated) باستثناء استثناء كـ e: print ("Error"، e)

سيجمع هذا البرنامج النصي مجموعة من بيانات المنتج ، يتم تمثيل كل منها على هيئة قاموس بالمفاتيح التالية:

  • keyword: كلمة البحث المستخدمة (مثل "iPad")
  • asin: رقم تعريف أمازون القياسي الفريد للمنتج
  • url: عنوان URL للمنتج
  • ad: قيمة منطقية تشير إلى ما إذا كان المنتج إعلانًا
  • title: عنوان المنتج
  • price: سعر المنتج
  • real_price: السعر الأصلي للمنتج قبل أي خصومات
  • rating: تصنيف المنتج
  • rating_count: عدد التقييمات التي حصل عليها المنتج
  • thumbnail_url: عنوان URL للصورة المصغرة للمنتج

يحدد البرنامج النصي أيضًا جميع الصفحات المتاحة لكلمة البحث الأساسية ويلحقها بامتداد url_list لكشط 【9 مصدر】.

استخراج بيانات المنتج من صفحات منتج أمازون

بمجرد أن يكون لديك قائمة بعناوين URL لمنتج Amazon ، يمكنك كشط جميع بيانات المنتج من كل صفحة منتجات Amazon فردية. إليك مثال على برنامج نصي يستخدم طلبات Python ومكتبات Parsel للقيام بذلك:

استيراد طلبات إعادة الاستيراد من محدد استيراد البارسيل من urllib.parse import urljoin product_urls = ['https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1 '،] product_data_list = [] لـ product_url في product_urls: جرِّب: response = calls.get (product_url) if response.status_code == 200: sel = المحدد (text = response.text) image_data = json.loads (re.findall (r "colorImages ':. *' initial ': \ s * (\ [. +؟ \])}، \ n"، response.text) [0]) variant_data = re.findall (r'dimensionValuesDisplayData "\ s *: \ s * ({. +؟})، \ n '، response.text) feature_bullets = [bullet.strip () للرصاصة في sel.css ("# feature-bullets li :: text"). getall ( )] price = sel.css ('. a-price span [aria-hidden = "true"] :: text'). احصل على ("") إذا لم يكن السعر: price = sel.css ('. a-price. a-offscreen :: text '). get ("") product_data_list.append ({"name": sel.css ("# productTitle :: text"). get (""). strip ()، "price": price، "stars": sel.css ("i [data-hook = average-star-rating] :: text"). get (""). strip ()، "rating_count": sel.css ("div [ data-hook = total-review-count] :: text "). get (" "). strip ()،" feature_bullets ": feature_bullets،" images ": image_data،" variant_data ": variant_data،}) باستثناء استثناء كـ e : print ("Error"، e)

يجمع هذا البرنامج النصي مجموعة من بيانات المنتج ، مع تمثيل كل منتج على هيئة قاموس بالمفاتيح التالية:

  • name: اسم المنتج
  • price: سعر المنتج
  • stars: تصنيف المنتج بالنجوم
  • rating_count: إجمالي عدد المراجعات التي تلقاها المنتج
  • feature_bullets: قائمة بالرموز النقطية للمنتج
  • images: قائمة بالصور عالية الدقة للمنتج
  • variant_data: بيانات حول متغيرات المنتج (على سبيل المثال ، تتوفر ألوان أو أحجام مختلفة)

تجدر الإشارة إلى أن هذا البرنامج النصي مصمم لاستخراج البيانات من صفحات المنتج بتخطيط محدد. إذا قامت أمازون بتغيير تخطيط صفحات منتجاتها ، فقد يحتاج البرنامج النصي إلى التحديث 【11 † المصدر】.

اعتبارات إضافية

على الرغم من أن البرامج النصية أعلاه توفر نقطة انطلاق لكشط Amazon ، إلا أن هناك اعتبارات إضافية يجب مراعاتها للحصول على حل تجريف كامل وقوي:

1. التعامل مع المحتوى الديناميكي

تستخدم بعض صفحات منتجات Amazon محتوى ديناميكيًا يتطلب تحميل JavaScript. إذا حاولت كشط هذه الصفحات بالطرق الموضحة أعلاه ، فقد تجد أن بعض البيانات التي تريدها مفقودة. في هذه الحالات ، ستحتاج إلى استخدام أداة يمكنها عرض JavaScript ، مثل Selenium أو Puppeteer.

2. احترام ملف robots.txt

الأمازون robots.txt يخبر الملف برامج زحف الويب بالصفحات المسموح لها بزيارتها. على الرغم من أن هذا الملف ليس ملزمًا قانونًا ، إلا أن تجاهله قد يؤدي إلى حظر عنوان IP الخاص بك. من الأفضل أن تحترم robots.txt ملف لتجنب أي مشاكل محتملة.

3. تحديد السعر

قد تحد Amazon من عدد الطلبات التي يمكنك إجراؤها في فترة زمنية معينة. إذا قمت بإجراء العديد من الطلبات بسرعة كبيرة جدًا ، فقد تحظر Amazon عنوان IP الخاص بك ، فقد تحتاج وكلاء أمازون. لتجنب ذلك ، يمكنك استخدام تقنيات مثل تقييد طلباتك أو ملفات تدوير عناوين IP.

4. الاعتبارات الاخلاقية

يمكن أن يفرض تجريف الويب طلبًا كبيرًا على خادم موقع الويب ، لذلك من المهم التخلص بشكل مسؤول. إذا كان بإمكانك الحصول على البيانات التي تحتاجها من عدد أقل من الصفحات ، فمن الأخلاقي أن تفعل ذلك. على سبيل المثال ، إذا كنت تحتاج فقط إلى بيانات المنتج الأساسية (الاسم ، السعر ، عنوان URL للصورة ، التقييم ، عدد المراجعات ، إلخ) ، يمكنك كشط هذه البيانات من صفحات البحث بدلاً من صفحات المنتج ، مما يقلل من عدد الطلبات التي تحتاجها إجعله بمعامل 20.


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

الوسوم (تاج):

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *