میخواهیم یک فایل HTML را پردازش کرده و همچنین اطلاعاتی را از آن استخراج کنیم. برای این کار، باید کلاسی به نام HTMLParser
طراحی کنید که ویژگیها و توابع زیر را دارا باشد:
فایل اولیه پروژه را از اینجا دریافت کنید.
پیش از شرح توابع و ویژگیها، مشخصههای جستجو finding_args
و مشخصهٔ خروجی output_arg
را شرح میدهیم:
۱- finding_args
: یک دیکشنری است که میتواند یک یا چند کلید از میان name
، id
، string
و class
بپذیرد. برای مثال برای تگی مانند مثال زیر:
مشخصهٔ name
برابر p
، مشخصهٔ id
برابر some-ID
، مشخصهٔ string
برابر you can access Quera here!
و مشخصهٔ class
برابر important
میباشد. تضمین میشود مشخصههای جستجوی ورودی تنها شامل مشخصههای فوق میباشد.
۲- output_arg
: یک str
است که مشخصهٔ مطلوب خروجی تابع را مشخص میکند و تضمین میشود مقادیری همانند بالا دارد. در صورتی که مقدار متناظر مشخصهٔ خروجی مقداردهی نشده بود، خروجی یک رشتهٔ خالی خواهد بود.
برای مثال فراخوانی یک تابع با مشخصههای فوق چنین است:
ویژگیها و توابع این کلاس به شرح زیر هستند:
۱- ویژگی html_doc
: کل کد HTML
به فرمت یک رشته str
است.
۲- متد find_first
: مقدار مشخصهٔ خروجی (output_arg
) اولین برچسب که با ویژگیهای finding_args
مطابقت داشته باشد را خروجی میدهد.
۳- متد find_all
: یک لیست به طول حداکثر n
از مقدار مشخصههای خروجی برچسبهای مطابق با finding_args
را برمیگرداند (n
تای اول). اگر تعداد برچسبهای یافتهشده کمتر از n
بود لیستی به اندازهٔ همان تعداد برمیگرداند.
مثال:
۴- متد find_parent
: مقدار مشخصهٔ خروجی اولین والد برچسب مطابق با مشخصههای جستجو را خروجی میدهد. (در صورتی که بیش از یک برچسب یافت شد، مقدار مطلوب را برای اولین برچسب یافتهشده خروجی میدهد.) تضمین میشود برچسبهای یافتهشده حداقل یک والد دارند.
مثال:
۵- متد find_grandparent
: مقدار مشخصهٔ خروجی n
اُمین جد (اولین جد همان والد است.) اولین برچسب مطابق با مشخصههای جستجو را خروجی میدهد. در صورتی که n
از تعداد جدهای برچسب یافته شده بیشتر باشد، استثنایی با پیام No Such Parent
پرتاب شود. تضمین میشود برچسبهای یافتهشده حداقل یک والد دارند.
۶- متد remove_comment
: اولین برچسب منطبق با مشخصهٔ ورودی را در صورتی که فقط محتوی کامنت باشد به طور کلی از html_doc
حذف میکند. کامنتهای HTML
به صورت زیر هستند:
در صورتی که محتویات اولین برچسب یافتهشده عاری از کامنت بود، استثایی با پیام No Comments Found
پرتاب شود.
۷- متد remove_all_comments
: تمامی برچسبهای محتوی کامنت را از html_doc
حذف میکند.
۸- متد remove_tag
: اولین برچسب مطابق با مشخصات ورودی را به طور کلی از html_doc
حذف میکند.
در تمامی متدهایی که میبایست برچسبی مطابق با مشخصات ورودی یافت شود، اگر برچسبی یافت نشد باید استثنایی با پیام No Such Tag
پرتاب شود.
در پاسخ ارسالی خود میتوانید از هر کتابخانهای که لازم میدانید استفاده کنید. اما در فایل ارسالی خود، علاوه بر فایل HTMLParser.py
که حاوی راهحل شما است، باید فایلی با نام python_requirements.txt
نیز موجود باشد که در آن نام کتابخانههای مورد نیاز و شمارهٔ نسخهٔ آنها به فرمت زیر در آن موجود باشد:
ساختار فایل .zip
ارسالی شما باید به صورت زیر باشد: