خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه ساخت مجموعه داده های سفارشی با Web Scraping

اسکرپینگ وب یکی از بهترین روش های جمع آوری داده برای جمع آوری داده ها و ساخت مجموعه داده های سفارشی در بالای آن است.

داشتن مجموعه داده های با کیفیت بالا در این عصر تصمیم گیری مبتنی بر داده ضروری است. در حالی که مجموعه داده‌های متعددی در دسترس عموم وجود دارد، گاهی اوقات ممکن است لازم باشد مجموعه‌های داده سفارشی بسازید که نیازهای خاص شما را برآورده کند. Web scraping به شما امکان می دهد داده ها را از وب سایت ها استخراج کنید. سپس می توانید از این داده ها برای ایجاد مجموعه داده های سفارشی خود استفاده کنید.

مروری بر روش های جمع آوری داده ها

روش های مختلف جمع آوری داده ها وجود دارد. آنها شامل ورود دستی داده ها، API ها، مجموعه داده های عمومی و خراش دادن وب هستند. هر روشی مزایا و محدودیت های خود را دارد.

ورود دستی داده ها زمان بر و مستعد خطاهای انسانی است، به ویژه برای جمع آوری داده ها در مقیاس بزرگ. با این حال، برای جمع آوری داده های در مقیاس کوچک و زمانی که داده ها از طریق روش های دیگر در دسترس نیستند، مفید است.

APIها به توسعه دهندگان این امکان را می دهند که به روشی ساختاریافته به داده ها دسترسی پیدا کرده و آنها را بازیابی کنند. آنها اغلب اطلاعاتی را در زمان واقعی یا به طور منظم به روز می کنند. با این حال، دسترسی API ممکن است محدود باشد، نیاز به احراز هویت داشته باشد، یا محدودیت استفاده داشته باشد.

مجموعه داده های عمومی طیف گسترده ای از موضوعات و حوزه ها را پوشش می دهد. آنها از قبل جمع‌آوری شده‌اند و اغلب در قالبی ساختاریافته ارائه می‌شوند و به راحتی قابل دسترسی هستند. زمانی که داده های مورد نیاز با مجموعه داده های موجود همسو شود، می توانند در زمان و تلاش صرفه جویی کنند. با این حال، ممکن است همیشه نیازهای خاص شما را پوشش ندهند یا به روز نباشند.

Web scraping راهی برای جمع آوری داده ها از وب سایت هایی که API ارائه نمی دهند یا دسترسی محدودی دارند ارائه می دهد. این امکان سفارشی سازی، مقیاس پذیری و توانایی جمع آوری داده ها از چندین منبع را فراهم می کند. با این حال، نیاز به مهارت های برنامه نویسی، دانش ساختار HTML و پیروی از دستورالعمل های قانونی و اخلاقی دارد.

مطلب مرتبط:   کاوی اجتماعی چیست و چگونه می تواند برای شما مفید باشد؟

انتخاب Web Scraping برای جمع آوری داده ها

خراش دادن وب شما را قادر می سازد اطلاعات را مستقیماً از صفحات وب استخراج کنید و به شما امکان دسترسی به طیف گسترده ای از منابع داده را می دهد. همچنین به شما امکان می دهد بر روی اینکه چه داده هایی را استخراج کنید و چگونه آنها را ساختار دهید کنترل کنید. این امر باعث می‌شود که فرآیند خراش دادن برای برآورده کردن نیازهای خاص شما و استخراج اطلاعات دقیقی که برای پروژه خود نیاز دارید، آسان شود.

شناسایی منبع داده

اولین گام در خراش دادن وب، شناسایی منبع داده است. این وب سایتی است که حاوی داده هایی است که می خواهید خراش دهید. هنگام انتخاب منبع داده، مطمئن شوید که با شرایط خدمات منبع مطابقت دارید. این مقاله از IMDb (پایگاه داده فیلم های اینترنتی) به عنوان منبع داده استفاده می کند.

تنظیم محیط

یک محیط مجازی راه اندازی کنید. سپس دستور زیر را برای نصب کتابخانه های مورد نیاز اجرا کنید.

pip install requests beautifulsoup4 pandas

شما از کتابخانه درخواست ها برای ایجاد درخواست های HTTP استفاده خواهید کرد. beautifulsoup4 برای تجزیه محتوای HTML و استخراج داده ها از صفحات وب. در نهایت، از پانداها برای دستکاری و تجزیه و تحلیل داده ها استفاده خواهید کرد.

کد منبع کامل در یک مخزن GitHub موجود است.

نوشتن اسکریپت Web Scraping

کتابخانه های نصب شده را در اسکریپت خود وارد کنید تا بتوانید از توابعی که ارائه می دهند استفاده کنید.

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
import re

ماژول های زمان و re بخشی از کتابخانه استاندارد پایتون هستند. بنابراین، نیازی به نصب جداگانه ندارید.

زمان باعث تأخیر در فرآیند خراشیدن می شود در حالی که دوباره با عبارات منظم سروکار دارد.

شما از Beautiful Soup برای خراش دادن وب سایت مورد نظر استفاده خواهید کرد.

تابعی ایجاد کنید که درخواست HTTP GET را به URL هدف شما ارسال کند. سپس باید محتوای پاسخ را بازیابی کند و یک شی BeautifulSoup از محتوای HTML ایجاد کند.

def get_soup(url, params=None, headers=None):
   response = requests.get(url, params=params, headers=headers)
   soup = BeautifulSoup(response.content, "html.parser")
   return soup

مرحله بعدی استخراج اطلاعات از شی BeautifulSoup است.

مطلب مرتبط:   نحوه استفاده از آرگومان های متغیر و کلیدواژه در پایتون

برای استخراج اطلاعات باید ساختار وب سایت هدف خود را درک کنید. این شامل بازرسی کد HTML وب سایت است. این به شما کمک می کند عناصر و ویژگی هایی را که حاوی داده هایی هستند که می خواهید استخراج کنید شناسایی کنید. برای بررسی وب سایت هدف خود، پیوند آن را در یک مرورگر وب باز کنید و به صفحه وب که حاوی داده هایی است که می خواهید خراش دهید بروید.

نتایج IMDb برای فیلم های منتشر شده در سال 2023

سپس روی صفحه وب کلیک راست کرده و Inspect را از منوی زمینه انتخاب کنید. با این کار ابزارهای توسعه دهنده مرورگر باز می شود.

استفاده از ابزارهای توسعه دهنده برای بازرسی وب سایت

در کد HTML صفحه وب، به دنبال عناصری بگردید که حاوی داده هایی هستند که می خواهید خراش دهید. به تگ ها، کلاس ها و ویژگی های HTML مرتبط با داده های مورد نیاز خود توجه کنید. شما از آنها برای ایجاد انتخابگرهایی برای استخراج داده ها با استفاده از BeautifulSoup استفاده خواهید کرد. در اسکرین شات بالا می بینید که عنوان فیلم در کلاس lister-item-header قرار دارد. هر ویژگی را که می خواهید استخراج کنید بررسی کنید.

تابعی ایجاد کنید که اطلاعات را از شی BeautifulSoup استخراج کند. در این حالت، این تابع عنوان، رتبه بندی، توضیحات، ژانر، تاریخ انتشار، کارگردانان و ستاره های فیلم را با استفاده از تگ های HTML مناسب و ویژگی های کلاس پیدا می کند.

def extract_movie_data(movie):
   title = movie.find("h3", class_="lister-item-header").find("a").text
   rating = movie.find("div", class_="ratings-imdb-rating").strong.text
   description = movie.find("div", class_="lister-item-content").find_all("p")[1].text.strip()
   genre_element = movie.find("span", class_="genre")
   genre = genre_element.text.strip() if genre_element else None
   release_date = movie.find("span", class_="lister-item-year text-muted unbold").text.strip()
   director_stars = movie.find("p", class_="text-muted").find_all("a")
   directors = [person.text for person in director_stars[:-1]]
   stars = [person.text for person in director_stars[-1:]]
   movie_data = {
       "Title": title,
       "Rating": rating,
       "Description": description,
       "Genre": genre,
       "Release Date": release_date,
       "Directors": directors,
       "Stars": stars
   }
   return movie_data

در نهایت، یک تابع ایجاد کنید که با استفاده از دو تابع بالا، خراشیدن واقعی را انجام دهد. سال و حداکثر تعداد فیلم‌هایی که می‌خواهید ضبط کنید طول می‌کشد.

def scrape_imdb_movies(year, limit):
   base_url = "https://www.imdb.com/search/title"
   headers = {"Accept-Language": "en-US,en;q=0.9"}
   movies = []
   start = 1
   while len(movies) < limit:
       params = {
           "release_date": year,
           "sort": "num_votes,desc",
           "start": start
       }
       soup = get_soup(base_url, params=params, headers=headers)
       movie_list = soup.find_all("div", class_="lister-item mode-advanced")
       if len(movie_list) == 0:
           break
       for movie in movie_list:
           movie_data = extract_movie_data(movie)
           movies.append(movie_data)
           if len(movies) >= limit:
               break
       start += 50 # IMDb displays 50 movies per page
       time.sleep(1) # Add a delay to avoid overwhelming the server
   return movies

سپس def scrape_imdb_movies را برای انجام scraping فراخوانی کنید.

# Scrape 1000 movies released in 2023 (or as many as available)
movies = scrape_imdb_movies(2023, 1000)

شما اکنون داده ها را خراش داده اید.

مطلب مرتبط:   نحوه مدیریت تاریخ و زمان در React با استفاده از Day.js

خروجی در Google Colab که داده های خراشیده شده را نشان می دهد

مرحله بعدی ایجاد یک مجموعه داده از این داده ها است.

ایجاد یک مجموعه داده از داده های خراشیده شده

با استفاده از پانداها از داده های خراشیده شده یک DataFrame ایجاد کنید.

df = pd.DataFrame(movies)

سپس، پیش پردازش و تمیز کردن داده ها را انجام دهید. در این حالت، ردیف هایی را که مقادیر گم شده دارند حذف کنید. سپس سال را از تاریخ انتشار استخراج کرده و آن را به عددی تبدیل کنید. ستون های غیر ضروری را حذف کنید. ستون Rating را به عددی تبدیل کنید. در نهایت، کاراکترهای غیر الفبایی را از ستون عنوان حذف کنید.

df = df.dropna()
df['Release Year'] = df['Release Date'].str.extract(r'(\d{4})')
df['Release Year'] = pd.to_numeric(df['Release Year'],
                                  errors='coerce').astype('Int64')
df = df.drop(['Release Date'], axis=1)
df['Rating'] = pd.to_numeric(df['Rating'], errors='coerce')
df['Title'] = df['Title'].apply(lambda x: re.sub(r'\W+', ' ', x))

داده ها را در یک فایل ذخیره کنید تا بعداً در پروژه خود استفاده کنید.

df.to_csv("imdb_movies_dataset.csv", index=False)

در نهایت، پنج ردیف اول مجموعه داده خود را چاپ کنید تا ظاهر آن را ببینید.

df.head()

خروجی مطابق تصویر زیر است:

خروجی google colab که پنج ردیف اول یک مجموعه داده را نشان می دهد

شما اکنون یک مجموعه داده دارید که از طریق وب اسکرپینگ به دست آمده است.

خراش دادن وب با استفاده از سایر کتابخانه های پایتون

Beautiful Soup تنها کتابخانه پایتون نیست که می توانید از آن برای خراش دادن وب استفاده کنید. کتابخانه های دیگری نیز در آنجا وجود دارد. هر کدام مزایا و محدودیت های خاص خود را دارند. در مورد آنها تحقیق کنید تا متوجه شوید که کدام یک به بهترین وجه مناسب مورد استفاده شما است.