يعد تجريف الويب أحد أفضل طرق جمع البيانات لجمع البيانات وبناء مجموعات بيانات مخصصة فوقها.
يعد امتلاك مجموعات بيانات عالية الجودة أمرًا ضروريًا في هذا العصر من صنع القرار المستند إلى البيانات. على الرغم من وجود العديد من مجموعات البيانات المتاحة للجمهور ، فقد تحتاج في بعض الأحيان إلى إنشاء مجموعات بيانات مخصصة تلبي احتياجاتك الخاصة. يتيح لك تجريف الويب استخراج البيانات من مواقع الويب. يمكنك بعد ذلك استخدام هذه البيانات لإنشاء مجموعة البيانات المخصصة الخاصة بك.
نظرة عامة على طرق جمع البيانات
هناك طرق مختلفة لجمع البيانات. وهي تشمل الإدخال اليدوي للبيانات وواجهات برمجة التطبيقات ومجموعات البيانات العامة وكشط الويب. كل طريقة لها مزاياها وقيودها.
يستغرق الإدخال اليدوي للبيانات وقتًا طويلاً وعرضة للأخطاء البشرية ، خاصةً بالنسبة لجمع البيانات على نطاق واسع. ومع ذلك ، فهي مفيدة لجمع البيانات على نطاق صغير وعندما تكون البيانات غير متوفرة من خلال وسائل أخرى.
تسمح واجهات برمجة التطبيقات للمطورين بالوصول إلى البيانات واستردادها بطريقة منظمة. غالبًا ما يقدمون معلومات في الوقت الفعلي أو يتم تحديثها بانتظام. ومع ذلك ، قد يكون الوصول إلى واجهة برمجة التطبيقات محدودًا ، أو يتطلب مصادقة ، أو به قيود على الاستخدام.
تغطي مجموعات البيانات العامة مجموعة واسعة من الموضوعات والمجالات. يتم تجميعها مسبقًا وغالبًا ما تأتي بتنسيق منظم ، مما يسهل الوصول إليها. يمكنهم توفير الوقت والجهد عندما تتوافق البيانات المطلوبة مع مجموعات البيانات المتاحة. ومع ذلك ، فقد لا تغطي دائمًا احتياجاتك المحددة أو تكون محدثة.
يوفر تجريف الويب طريقة لجمع البيانات من مواقع الويب التي لا تقدم واجهات برمجة تطبيقات أو لديها وصول محدود. يسمح بالتخصيص وقابلية التوسع والقدرة على جمع البيانات من مصادر متعددة. ومع ذلك ، فإنه يتطلب مهارات البرمجة ومعرفة بنية HTML والالتزام بالإرشادات القانونية والأخلاقية.
اختيار تجريف الويب لجمع البيانات
يمكّنك تجريف الويب من استخراج المعلومات مباشرة من صفحات الويب ، مما يتيح لك الوصول إلى مجموعة واسعة من مصادر البيانات. يمنحك أيضًا التحكم في البيانات التي يجب استخراجها وكيفية هيكلتها. هذا يجعل من السهل تصميم عملية الكشط لتلبية متطلباتك المحددة واستخراج المعلومات الدقيقة التي تحتاجها لمشروعك.
تحديد مصدر البيانات
الخطوة الأولى في تجريف الويب هي تحديد مصدر البيانات. هذا هو موقع الويب الذي يحتوي على البيانات التي تريد كشطها. عند اختيار مصدر البيانات ، تأكد من التوافق مع شروط خدمة المصدر. ستستخدم هذه المقالة IMDb (قاعدة بيانات الأفلام على الإنترنت) كمصدر للبيانات.
تهيئة بيئتك
قم بإعداد بيئة افتراضية. ثم قم بتشغيل الأمر التالي لتثبيت المكتبات المطلوبة.
طلبات تثبيت نقطة الباندا beautifulsoup4
سوف تستخدم ملف الطلبات مكتبة لعمل طلبات HTTP. جميل لتحليل محتوى HTML واستخراج البيانات من صفحات الويب. أخيرًا ، سوف تستخدم الباندا لمعالجة البيانات وتحليلها.
كود المصدر الكامل متاح في ملف مستودع جيثب.
كتابة سكربت ويب
قم باستيراد المكتبات المثبتة في البرنامج النصي الخاص بك لتتمكن من استخدام الوظائف التي توفرها.
يستورد الطلبات
من بكالوريوس 4 يستورد شوربة جميلة
يستورد وقت
يستورد الباندا مثل pd
يستورد يكرر
ال وقت و يكرر الوحدات النمطية هي جزء من مكتبة Python القياسية. وبالتالي ، لا تتطلب عمليات تثبيت منفصلة.
وقت سيضيف تأخيرات إلى عملية الكشط أثناء يكرر سوف تتعامل معها التعبيرات العادية.
سوف تفعلها استخدم حساء جميل لتتخلص من الموقع المستهدف.
قم بإنشاء وظيفة ترسل طلب HTTP GET إلى عنوان URL المستهدف. يجب بعد ذلك استرداد محتوى الرد وإنشاء ملف شوربة جميلة كائن من محتوى HTML.
defget_soup(url، params = None، headers = None):
response = request.get (url، params = params، headers = headers)
حساء = BeautifulSoup (response.content ، "html.parser")
يعود حساء
الخطوة التالية هي استخراج المعلومات من ملف شوربة جميلة هدف.
لاستخراج المعلومات التي تحتاجها لفهم هيكل موقع الويب المستهدف. يتضمن ذلك فحص كود HTML الخاص بالموقع. سيساعدك هذا في تحديد العناصر والسمات التي تحتوي على البيانات التي تريد استخراجها. لفحص موقع الويب المستهدف ، افتح الرابط الخاص به في متصفح الويب وانتقل إلى صفحة الويب التي تحتوي على البيانات التي تريد كشطها.
ثم انقر بزر الماوس الأيمن فوق صفحة الويب وحدد فحص من قائمة السياق. سيؤدي هذا إلى فتح أدوات مطور المتصفح.
في كود HTML لصفحة الويب ، ابحث عن العناصر التي تحتوي على البيانات التي تريد كشطها. انتبه إلى علامات HTML والفئات والسمات المرتبطة بالبيانات التي تحتاجها. ستستخدمها لإنشاء محددات لاستخراج البيانات باستخدام BeautifulSoup. في لقطة الشاشة أعلاه ، يمكنك أن ترى أن عنوان الفيلم موجود داخل ملف lister-البند-header فصل. افحص كل ميزة تريد استخراجها.
قم بإنشاء وظيفة من شأنها استخراج المعلومات من ملف شوربة جميلة هدف. في هذه الحالة ، تبحث الوظيفة عن العنوان والتصنيف والوصف والنوع وتاريخ الإصدار والمخرجين ونجوم الفيلم باستخدام علامات HTML المناسبة وسمات الفئة.
defextract_movie_data(فيلم):
العنوان = movie.find ("h3"، class_ ="lister-item-header").يجد("أ").نص
تصنيف = movie.find ("div"، class_ ="تصنيفات - تصنيف - IMDB"). قوي. النص
الوصف = movie.find ("div"، class_ ="lister-item-content").جد كل("ص")[1] .text.strip ()
genre_element = movie.find ("فترة"، class_ ="النوع")
النوع = genre_element.text.strip () لو genre_element آخرلا أحد
Release_date = movie.find ("فترة"، class_ ="lister-item-year-text-blold غير غامق") .text.strip ()
Director_stars = movie.find ("ص"، class_ ="كتم صوت النص").جد كل("أ")
المخرجون = [person.text ل شخص في Director_stars [:-1]]
النجوم = [person.text ل شخص في Director_stars [-1:]]
movie_data = {
"عنوان": عنوان،
"تقييم": تقييم،
"وصف": وصف،
"النوع": genre،
"تاريخ الافراج عنه": تاريخ الافراج عنه،
"المديرون": المخرجون،
"النجوم": النجوم
}
يعود movie_data
أخيرًا ، قم بإنشاء دالة تقوم بالتجريف الفعلي باستخدام الوظيفتين المذكورتين أعلاه. سيستغرق الأمر العام والحد الأقصى لعدد الأفلام التي تريد كشطها.
defscrape_imdb_movies(سنة ، حد):
base_url = " https://www.imdb.com/search/title"
رؤوس = {"قبول اللغة": "en-US، en؛ ف = 0.9 "}
أفلام = []
تبدأ = 1
بينما len (أفلام) المعلمات = {
"تاريخ الافراج عنه": سنة،
"نوع": "عدد_الأصوات ، تنازلي",
"يبدأ": يبدأ
}
soup = get_soup (base_url، params = params، headers = headers)
movie_list = soup.find_all ("div"، class_ ="وضع lister-item-Advanced")
لو لين (movie_list) == 0:
استراحة
ل فيلم في قائمة_فيلم:
movie_data = extract_movie_data (فيلم)
movies.append (movie_data)
لو لين (أفلام)> = الحد:
استراحة
تبدأ + = 50# IMDb يعرض 50 فيلمًا في كل صفحة
وقت النوم(1) # أضف تأخيرًا لتجنب إرباك الخادم
يعود أفلام
ثم اتصل ب مواطنه scrape_imdb_movies للقيام بعملية الكشط.
# فيلم Scrape 1000 الذي تم إصداره في عام 2023 (أو أكبر عدد ممكن من الأفلام المتوفرة)
أفلام = scrape_imdb_movies (2023, 1000)
لقد قمت الآن بكشط البيانات.
الخطوة التالية هي إنشاء مجموعة بيانات من هذه البيانات.
تكوين مجموعة بيانات من البيانات المقتبسة
قم بإنشاء DataFrame باستخدام Pandas من البيانات المقتطعة.
df = pd. DataFrame (أفلام)
ثم قم بمعالجة البيانات وتنظيفها. في هذه الحالة ، قم بإزالة الصفوف ذات القيم المفقودة. ثم استخرج السنة من تاريخ الإصدار وقم بتحويلها إلى رقم. قم بإزالة الأعمدة غير الضرورية. تحويل ملف تقييم عمود رقمي. أخيرًا ، قم بإزالة الأحرف غير الأبجدية من ملف عنوان عمود.
df = df.dropna ()
مدافع ['سنة الإصدار'] = مدافع ['تاريخ الافراج عنه'] .str.extract (ص "(\ د {4})")
مدافع ['سنة الإصدار'] = pd.to_numeric (df ['سنة الإصدار'],
الأخطاء ="إكراه") .astype ("Int64")
df = df.drop (['تاريخ الافراج عنه'] ، المحور =1)
مدافع ['تقييم'] = pd.to_numeric (df ['تقييم'] ، الأخطاء ="إكراه")
مدافع ['عنوان'] = مدافع ['عنوان'].يتقدم(لامدا x: re.sub (r '\ W +', ' '، خ))
قم بتخزين البيانات في ملف لاستخدامها لاحقًا في مشروعك.
df.to_csv ("imdb_movies_dataset.csv"، الفهرس =خطأ شنيع)
أخيرًا ، اطبع الصفوف الخمسة الأولى من مجموعة البيانات للحصول على عرض لكيفية ظهورها.
df.head ()
الإخراج كما هو موضح في لقطة الشاشة أدناه:
لديك الآن مجموعة بيانات تم الحصول عليها من خلال تجريف الويب.
تجريف الويب باستخدام مكتبات Python الأخرى
ليست Beautiful Soup هي مكتبة Python الوحيدة التي يمكنك استخدامها في تجريف الويب. هناك مكتبات أخرى هناك. لكل منها مزاياها وقيودها. ابحث عنها لتكتشف أيها يناسب حالة الاستخدام الخاصة بك.