شعار proxyscrape داكن

كشط الويب، والتعبيرات العادية، وتصور البيانات، والقيام بكل ذلك باستخدام لغة بايثون

بايثون, كشط, Mar-06-20245 دقائق للقراءة

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

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

يمكن تعريف كشط الويب على أنه طريقة جمع البيانات من المواقع الإلكترونية وإعادة هيكلتها. ويمكن تعريفها أيضًا على أنها الطريقة البرمجية للحصول على بيانات الموقع الإلكتروني بطريقة آلية. على سبيل المثال، تريد استخراج معرّفات البريد الإلكتروني لجميع الأشخاص الذين علّقوا على منشور على فيسبوك. يمكنك القيام بذلك بطريقتين. أولاً، يمكنك توجيه المؤشر إلى سلسلة عناوين البريد الإلكتروني لأي شخص. يمكنك بعد ذلك نسخها ولصقها في ملف. تُعرف هذه الطريقة باسم الكشط اليدوي. ولكن ماذا لو كنت تريد جمع 2000 معرف بريد إلكتروني؟ بمساعدة أداة كشط الويب، يمكنك استخراج جميع معرفات البريد الإلكتروني في 30 ثانية بدلاً من 3 ساعات إذا كنت تستخدم الكشط اليدوي.

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

كشط الويب في بايثون

لدى Python أدوات ممتازة لكشط البيانات من الويب. على سبيل المثال، يمكنك استيراد مكتبة الطلبات لاسترداد المحتوى من صفحة ويب و bs4(الحساء الجميل) لاستخراج المعلومات ذات الصلة. يمكنك اتباع الخطوات أدناه لكشط الويب باستخدام Python. سنقوم باستخراج المعلومات من هذا الموقع. 

طلبات الاستيراد:

يجب عليك استيراد مكتبة الطلبات لجلب HTML لموقع الويب. 

طلبات الاستيراد

طلب الحصول على طلب:

عليك إجراء طلب GET إلى الموقع الإلكتروني. يمكنك القيام بذلك عن طريق لصق عنوان URL في الدالة requests.get().

r = الطلبات.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

استخرج المحتوى:

استخرج محتوى الموقع الإلكتروني باستخدام r.content. يعطي محتوى الموقع الإلكتروني بالبايت. 

ج = r.content

استيراد الحساء الجميل:

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

من bs4 bs4 استيراد الحساء الجميل

إنشاء كائن حساء:

عليك إنشاء كائن BeautifulSoup من المحتوى وتحليله باستخدام عدة طرق.

الحساء = حساء جميل(ج)
طباعة(soup.get_get_text()))

ستحصل على الإخراج (إنه مجرد جزء) مثل هذا إلى حد ما.

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

علينا العثور على محددات CSS الصحيحة حيث نحتاج إلى استخراج البيانات المطلوبة. يمكننا العثور على المحتوى الرئيسي على صفحة الويب باستخدام طريقة .find() لكائن الحساء.

main_content = soup.find('div', attrs = {'class': 'entry-content'})

استخدم السمة .text:

يمكننا استرداد المعلومات كنص من الجدول باستخدام السمة .text من الحساء.

المحتوى = main_content.find('ul').text
طباعة(المحتوى)

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

التعبيرات العادية في بايثون

التعبيرات العادية (RegEx) هي سلسلة من الأنماط التي تحدد نمط بحث. الفكرة الأساسية هي

  • حدد النمط الذي تريد مطابقته في سلسلة نصية. 
  • ابحث في السلسلة عن التطابقات المرتجعة.

لنفترض أننا نريد استخراج الأجزاء التالية من المعلومات من الجدول النصي.

  • الرواتب
  • أسماء الكليات
  • أسماء الرؤساء

يمكنك استخراج المعلومات الثلاث باتباع الخطوات المذكورة أدناه.

الخطوة 01:

استورد re ولاستخراج الرواتب، عليك إنشاء نمط راتب. استخدم طريقة re.compile() لتحويل نمط تعبير عادي مُقدَّم كسلسلة إلى كائن نمط RegEx. علاوةً على ذلك، يمكنك استخدام النمط.findall() للعثور على جميع التطابقات وإرجاعها كقائمة من السلاسل. ستمثل كل سلسلة تطابقًا واحدًا.

استيراد re
salary_pattern = re.compile(r'\\$.+')
الرواتب = salary_pattern.findall(content)

الخطوة 02:

كرر نفس الإجراء لاستخراج أسماء الكليات. قم بعمل نمط واستخراج الأسماء. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

الخطوة 03:

كرر نفس الإجراء لاستخراج أسماء الرؤساء. قم بعمل نمط واستخراج الأسماء المطلوبة. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

الخطوة 04:

تبدو الرواتب فوضوية وغير مفهومة. لذا، نستخدم فهم قائمة بايثون لتحويل سلسلة الرواتب إلى أرقام. سنستخدم تشريح السلسلة، والتقسيم والوصل، وفهم القائمة لتحقيق النتائج المرجوة.

الرواتب = ['876,001$،  543,903$،  2453,896$]
[int('''.join(s[1:].split(','))) ل s في الرواتب]

يكون الناتج على النحو التالي:

تصور البيانات في بايثون

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

يمكننا استخدام matplotlib لتصور البيانات، كما هو موضح أدناه.

قم باستيراد المكتبات اللازمة كما هو موضح أدناه.

استيراد بانداس ك pd
استيراد matplotlib.pyplot باسم plt

اصنع إطار بيانات بانداس للمدارس والأسماء والرواتب. على سبيل المثال، يمكنك تحويل المدارس إلى إطار بيانات على النحو التالي:

دف_مدرسة = pd.DataFrame(مدارس)
طباعة(df_school)

الناتج هو:

وبالمثل، يمكنك فعل الشيء نفسه بالنسبة للرواتب والأسماء.

لتصور البيانات، يمكننا رسم تمثيل بياني بالأعمدة كما هو موضح أدناه.

df.plot(kind='barh'، x = 'الرئيس'، y = 'الراتب')

يكون الناتج على النحو التالي:

لماذا نحتاج إلى البروكسيات لكشط الويب؟

يساعد كشط الويب الشركات على استخراج معلومات مفيدة حول رؤى السوق والصناعات لتقديم خدمات مدعومة بالبيانات واتخاذ قرارات قائمة على البيانات. تُعد البروكسيات ضرورية لكشط البيانات من مواقع الويب المختلفة للأسباب التالية بفعالية

  • تجنّب حظر بروتوكول الإنترنت - لمنع الكاشطات من إجراء الكثير من الطلبات، تحدّ مواقع الويب التجارية من كمية البيانات القابلة للزحف التي يُطلق عليها معدل الزحف. ويؤدي معدل الزحف إلى إبطاء سرعة الموقع الإلكتروني، ويصبح من الصعب على المستخدم الوصول إلى المحتوى المطلوب بفعالية. ومع ذلك، إذا كنت تستخدم مجموعة كافية من الوكلاء لكشط البيانات، فستتجاوز حدود المعدل على الموقع الإلكتروني المستهدف. وذلك لأن الوكلاء يرسلون الطلبات من عناوين IP مختلفة، مما يسمح لك باستخراج البيانات من مواقع الويب حسب متطلباتك.
  • تمكين الوصول إلى المحتوى الخاص بالمنطقة - يتعين على الشركات مراقبة منافسيها (المواقع الإلكترونية) لتوفير ميزات المنتجات والأسعار المناسبة للعملاء في منطقة جغرافية معينة. ويمكنهم الوصول إلى كل المحتوى المتاح في تلك المنطقة باستخدام البروكسيات السكنية بعناوين IP.
  • الأمان المحسّن - يضيف الخادم الوكيل طبقة إضافية من الأمان من خلال إخفاء عنوان IP الخاص بجهاز المستخدم.

هل تعرف عدد الوكلاء المطلوبين للحصول على المزايا المذكورة أعلاه؟ يمكنك حساب العدد المطلوب من الوكلاء باستخدام هذه الصيغة:

عدد البروكسيات = عدد طلبات الوصول / معدل الزحف

يعتمد عدد طلبات الوصول على المعلمات التالية.

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

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

استخدام الوكلاء في بايثون

يمكنك استخدام البروكسيات في Python باتباع الخطوات التالية.

  • يجب عليك استيراد وحدة طلبات Python النمطية.
طلبات الاستيراد
  • يمكنك إنشاء مجموعة من الوكلاء لتدويرها.
الوكيل = 'http://114.121.248.251:8080'
عنوان url = 'https://ipecho.net/plain'
  • يمكنك استخدام requests.get() لإرسال طلب GET عن طريق تمرير وكيل كمعامل إلى عنوان URL.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • يمكنك الحصول على محتوى عنوان URL المطلوب إذا لم يكن هناك خطأ في الاتصال.
طباعة(نص الصفحة)

يكون الناتج على النحو التالي:

الخاتمة

ناقشنا أنه يمكننا استخدام كشط الويب لاستخراج البيانات من المواقع الإلكترونية بدلاً من استخدام الكشط اليدوي. يعتبر كشط الويب عملية فعالة من حيث التكلفة وموفرة للوقت. وتستخدمه الشركات لجمع معلومات الويب وإعادة هيكلتها لاتخاذ قرارات تستند إلى البيانات واكتساب رؤى قيمة. يعد استخدام البروكسيات أمرًا ضروريًا لكشط الويب الآمن لأنه يخفي عنوان IP الأصلي للمستخدم من الموقع المستهدف. يمكنك استخدام مراكز البيانات أو البروكسيات السكنية لكشط الويب. ولكن يفضل استخدام البروكسيات السكنية لأنها سريعة ولا يمكن اكتشافها بسهولة. علاوة على ذلك، يمكننا استخدام التعبيرات العادية في Python لمطابقة أو العثور على مجموعات من السلاسل. وهذا يعني أنه يمكننا استخراج أي نمط سلسلة من النص بمساعدة التعبيرات العادية. رأينا أيضًا أن تصور البيانات يحول الكميات الضخمة من البيانات إلى مخططات ورسوم بيانية ومرئيات أخرى تساعدنا في اكتشاف الحالات الشاذة وتحديد الاتجاهات المفيدة في البيانات.