در مطلب ماژول urllib در پایتون برای خواندن صفحه وب در مورد چگونگی باز کردن و خواندن محتوای یک صفحه وب و ذخیره سازی آن درون یک فایل با پسوند html صحبت کردیم. در این مطلب می خواهیم جنبه دیگری از تعامل با آدرس های وب (URL) را بررسی کنیم و آن اینکه چگونه یک آدرس وب را به مولفه های تشکیل دهنده آن بشکنیم. این کار زمانی مهم است که به طور مثال می خواهید تمامی تصویرهای درون صفحه را دانلود کنید، پس لازم است پسوند فایل را از درون آدرس URL بدست آورید تا فایل ها و محتوای غیر مرتبط ذخیره نشوند.

در شکل زیر می توانید مولفه های متفاوت یک آدرس URL را ببینید. برای تجزیه و استخراج این مولفه ها در پایتون، باید از متد ()urlparse از ماژول urllib.parse استفاده کنیم. به طور مثال می خواهیم تنها و تنها آدرس هایی را از درون صفحه های وب استخراج کنیم که دارای پروتکل https باشند. خروجی متد ()urlparse به صورت یک تاپل متشکل از مولفه های شکل زیر است که اولین مولفه آن scheme با اندیس صفر است. یک آدرس URL می تواند یکی از اسکیما های (یا پروتکل های) زیر را داشته باشد.

file, ftp, gopher, hdl, http, https, imap, mailto, mms, news, nntp, prospero, rsync, rtsp, rtspu, sftp, shttp, sip, sips, snews, svn, svn+ssh, telnet, wais, ws, wss.

در کد های شکل زیر ابتدا متد ()urlparse از ماژول urllib.parse به درون فایل برنامه ضمیمه شده است و سپس آدرس زیر به متد ()urlparse فرستاده شده است. پس در این زمان متغیر url_components به صورت یک تاپل است که هر عنصر درون آن برابر با یکی از مولفه های آدرس URL زیر هستند.

در آخرین کد شکل بالا می بینید که عنصر با اندیس صفر از تاپل خروجی ()urlparse نشان داده شده است که برابر با اسکیما یا پروتکلی است که URL از آن استفاده می کند. در این مطلب این پروتکل برابر با https است. حال می خواهیم از آدرس بالا، شماره پرسش مربوط به مطلب را در سایت Stack Overflow بدست آوریم، پس باید عنصر سوم که نام آن در خروجی path است را بوسیله متد ()split به زیر بخش هایی بر اساس کاراکتر / بشکنیم.

توجه کنید عنصر path، عنصر سوم با اندیس شماره ۲ است و همچنین مقداری که درون عنصر سوم دخیره می شود، از نوع رشته است، پس می توانیم متد ()split را روی آن اجرا کنیم. توجه کنید که متد ()split به صورت پیشفرض یک رشته را بر اساس فضای خالی می شکند ولی در این مطلب می خواهیم بر اساس کاراکتر / (یا Backslash) یک بخش از آدرس URL را بشکنیم.

کاربرد تابع split در پایتون

اگر به کدهای بالا دقت کنید، خروجی متد ()split در حالت اول یک لیست است که در آدرسی که در بالا گفتیم، شماره پرسش به عدد 19687421 عنصر سوم با اندیس شماره ۲ است، پس در خط بعدی اندیس ۲ بعد از متد ()split به همین عنصر اشاره دارد. پس توانستیم در این آدرس، شماره پرسش را بدست آوریم.

به عنوان آخرین مثال از کاربرد متد ()urlparse، می خواهیم پسوند یک فایل مشخص شده از طریق آدرس URL را بدست آوریم. پس بازهم در گام نخست،باید تاپل خروجی متد ()urlparse را بر اساس کاراکتر / بشکنیم تا یک لیست از رشته ها ایجاد شود. توجه کنید اگر آدرس URL به یک فایل اشاره کند، پس این نام فایل آخرین بخش لیستی است که در بالا و گام نخست ایجاد شده است. با توجه به مفهوم اسلایس بندی لیست ها در پایتون، می توانیم به عنصر پایانی، از طریق اندیس 1- دسترسی پیدا کنیم. در نهایت در گام سوم، باید نام فایل را برای بدست آورن پسوند آن، بر اساس کاراکتر نقطه، توسط متد ()split بشکنیم

دانلود سورس کد این مطلب PyWebscarping – urlparse method

همچنین می توانید از اینجا در مورد متد ()urlsplit از ماژول urllib.parse بخوانید