داكن proxyscrape شعار

تجريف الويب ، والتعبيرات العادية ، وتصور البيانات ، والقيام بكل ذلك في Python

بايثون ، كشط ، نوفمبر 02-20225 دقائق للقراءة

Web scraping can be defined as the method of collecting and restructuring data from websites. It can also be defined as the programmatic approach of obtaining website data in an automated manner. For instance, you want to extract the email IDs of all people who commented on a Facebook post. You can do this by

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

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

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

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

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

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

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

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

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

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

r = requests.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.المحتوى

استيراد شوربة جميلة:

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

من bs4 استيراد شوربة جميلة

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الخطوة 01:

استيراد إعادة واستخراج الرواتب ، عليك أن تجعل نمط الراتب. استخدم طريقة re.compile() لتجميع نمط تعبير عادي يتم توفيره كسلسلة في كائن نمط RegEx. علاوة على ذلك ، يمكنك استخدام pattern.findall() للعثور على جميع التطابقات وإعادتها كقائمة من السلاسل. ستمثل كل سلسلة تطابقا واحدا.

استيراد إعادة
salary_pattern = إعادة. compile(r'\$.+')
الرواتب = salary_pattern.findall (المحتوى)

الخطوة 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

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

df_school = pd. إطار البيانات (المدارس)
طباعة(df_school)

الإخراج هو:

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

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

df.plot (النوع = '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 لمطابقة أو العثور على مجموعات من السلاسل. هذا يعني أنه يمكننا استخراج أي نمط سلسلة من النص بمساعدة التعبيرات العادية. رأينا أيضا أن تصور البيانات يحول كميات هائلة من البيانات إلى مخططات ورسوم بيانية ومرئيات أخرى تساعدنا في اكتشاف الحالات الشاذة وتحديد الاتجاهات المفيدة في البيانات.