آموزش عیب یابی در Beautiful Soup

4 سال پیش
آموزش عیب یابی در Beautiful Soup
امتیاز دهید post

آموزش عیب یابی در Beautiful Soup

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش عیب یابی در Beautiful Soup خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پایتون مختص بازار کار

مدیریت خطا

دو نوع اصلی از خطاها وجود دارد که باید در BeautifulSoup مرتفع شوند. این دو خطا از اسکریپت شما نیست بلکه از ساختار قطعه است زیرا BeautifulSoup API خطایی ایجاد می کند.

دو خطای اصلی به شرح زیر است –

AttributeError

هنگامی که علامت گذاری تگ sibling را با تگ HTML فعلی پیدا نمی کند، ایجاد می شود. به عنوان مثال، ممکن است با این خطا روبرو شده باشید، زیرا به دلیل از دست دادن “anchor tag”، کلید هزینه با عبور از آن و نیاز به anchor tag، خطایی ایجاد می کند.

KeyError

این خطا در صورت عدم وجود ویژگی لازم تگ HTML رخ می دهد. به عنوان مثال، اگر ویژگی data-pid را در یک قطعه نداشته باشیم، کلید pid خطای کلیدی را نشان می دهد.

برای جلوگیری از دو خطای ذکر شده در بالا هنگام تجزیه یک نتیجه، برای اطمینان از عدم وارد شدن قطعه بد در پایگاه داده، آن نتیجه بای پس می شود –

 

()diagnose

هرگاه در درک آنچه BeautifulSoup با سند یا HTML ما انجام می دهد مشکلی پیدا کردیم، کافی است آن را به تابع () diagnose منتقل کنید. با انتقال فایل سند به تابع ()diagnose، می توانیم نشان دهیم که چگونه لیست تجزیه کننده های مختلف سند را کنترل می کند.

در زیر یک مثال برای نشان دادن استفاده از تابع ()diagnose وجود دارد –

 

خروجی

Diagnose

خطای تجزیه

دو نوع اصلی از خطاهای تجزیه وجود دارد. هنگامی که سند خود را به BeautifulSoup می دهید، ممکن است یک استثنا مانند HTMLParseError دریافت کنید. همچنین ممکن است یک نتیجه غیرمنتظره داشته باشید، جایی که درخت تجزیه BeautifulSoup بسیار متفاوت از نتیجه مورد انتظار از سند تجزیه است.

هیچ یک از خطاهای تجزیه به دلیل BeautifulSoup ایجاد نشده است. این به دلیل تجزیه کننده خارجی است که ما از آن استفاده می کنیم (html5lib، lxml) زیرا BeautifulSoup هیچ کد تجزیه کننده ای ندارد. یکی از راه های حل خطای تجزیه بالا استفاده از تجزیه کننده دیگر است.

 

تجزیه کننده داخلی پایتون باعث ایجاد دو خطای متداول تجزیه، HTMLParser.HTMLParserError: malformed start tag و HTMLParser.HTMLParserError: bad end tag است و برای حل این مشکل، استفاده از تجزیه کننده دیگر به طور عمده: lxml یا html5lib توصیه می شود.

نوع متداول دیگر رفتار غیرمنتظره این است که نمی توانید تگی را که می دانید در سند وجود دارد پیدا کنید. اما، هنگام اجرای()find_all() returns [] or find هیچکدام را بر نمی گرداند.

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

خطای تجزیه کننده XML

به طور پیش فرض، بسته BeautifulSoup اسناد را به صورت HTML تجزیه می کند، با این حال  استفاده از آن بسیار آسان است و با شکل زیبا و با استفاده از beautifulsoup4 از XML بد شکل استفاده می کند.

برای تجزیه سند به عنوان XML ، باید تجزیه کننده lxml داشته باشید و فقط باید “xml” را به عنوان آرگومان دوم به سازنده Beautifulsoup منتقل کنید –

 

یا

 

یکی از خطاهای تجزیه XML معمول –

این ممکن است در صورتی اتفاق بیفتد که برخی از عناصر هنگام استفاده از تابع () find یا ()findall  مشخص نشده باشند.

سایر خطاهای تجزیه

در زیر برخی دیگر از خطاهای تجزیه که در این بخش بحث خواهیم کرد –

مسئله محیطی

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

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

Case-insensitive

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

UnicodeEncodeError

اجازه دهید بخش زیر کد را بررسی کنیم –

خروجی

 

مشکل فوق ممکن است به دلیل دو وضعیت اصلی باشد. ممکن است شما در حال چاپ یک کاراکتر یونیکد باشید که کنسول شما نمی داند چگونه نمایش داده شود. دوم، شما می خواهید در یک فایل بنویسید و یک کاراکتر یونیکد را وارد می کنید که توسط رمزگذاری پیش فرض شما پشتیبانی نمی شود.

یکی از راه های حل این مشکل این است که متن / کاراکتر پاسخ را قبل از تهیه سوپ رمزگذاری کنید تا به نتیجه دلخواه برسید.

 

 

[KeyError: [attr

وقتی تگ مورد نظر ویژگی Attr را تعریف نمی کند، با دسترسی به تگ [‘Attr’] ایجاد می شود. رایج ترین خطاها عبارتند از: “KeyError:” href “” و “KeyError:” class “. اگر مطمئن نیستید که Attr تعریف نشده است از (tag.get (‘attr’ استفاده کنید.

 

AttributeError

ممکن است به شرح زیر با AttributeError روبرو شوید –

خطای بالا عمدتا به این دلیل رخ می دهد که انتظار دارید ()find_all  یک تگ یا رشته را برگرداند. با این حال ، soup.find_all لیستی از عناصر پایتون را برمی گرداند.

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

منبع.

لیست جلسات قبل آموزش Beautiful Soup در پایتون

  1. آموزش Beautiful Soup در پایتون
  2.  بررسی اجمالی Beautiful Soup در پایتون
  3. آموزش نصب Beautiful Soup
  4. آموزش Souping کردن صفحه در Beautiful Soup
  5. انواع اشیا beautiful soup 
  6. آموزش پیمایش توسط تگ ها در Beautiful Soup
  7. آموزش درخت جستجو در Beautiful soup 
  8. آموزش اصلاح درخت در Beautiful Soup 
  9. آموزش رمزگذاری در Beautiful Soup
  10. آموزش اشیا Beautiful در Beautiful Soup 
  11. آموزش تجزیه فقط یک بخش از سند در Beautiful soup
امتیاز دهید post
0
برچسب ها :
نویسنده مطلب saber

دیدگاه شما

بدون دیدگاه