در این مطلب نخست بوسیله کلاس Request از ماژول urllib.request یک درخواست Http را آماده و سپس آنرا به متد ()urlopen می فرستیم. همانطور که در پیش رو خواهید دید، دلیل این کار برای بر طرف کردن مشکل HTTP 403 Forbidden است. سپس داده های رده بندی فوتبال مردان را برای رده بندی جهانی می خوانیم. با تمام شدن این مطلب شما چگونگی کار با جدول ها را یاد خواهید گرفت و مروری برای متدهای ()find و ()find_all (یا ()findAll) نیز خواهد بود.

خواندن صفحه وب رده بندی فوتبال مردان

پیش از هر چیز و در گام نخست باید صفحه وبی که جدول رده بندی در آن قرار دارد را بخوانیم که باز هم مطابق کدهای زیر از متد ()urlopen از ماژول urllib.request کمک می گیریم. در کدهای زیر از استثنا HTTPError استفاده کرده ایم تا خطاهای ممکن در زمان خواندن صفحه وب را نمایش دهیم. در صورتی که صفحه به درستی خوانده شود، پس شی soup از کلاس BeautifulSoup نیز ایجاد می شود.

ولی خروجی شکل بالا نشان می دهد که وب سرور سایت فیفا از درخواست ما جلوگیری کرده است. خطای HTTP 403 به این مفهوم است که، وبسرور با ارسال این کد در پاسخ به یک درخواست، نشان می‌دهد که درخواست را به‌طور کامل دریافت کرده و فهمیده است، اما از اجرای ادامه درخواست شما امتناع می‌ورزد. پس باید کد بالا را مطابق کدهای زیر بازنویسی کنیم. در کدهای زیر یک درخواست HTTP (یا HTTP Request) را توسط کلاس Request ایجاد کرده ایم. پارامتر اول متد سازنده کلاس آدرس وب و پارامتر دیگر آن، یعنی headers، بخش هدر ارسالی به سایت را دریافت می کند که در اینجا یک دیکشنری فرستاده ایم که دارای یک کلید به نام User-Agent است. می توانید فهرست User Agent ها را از اینجا ببینید. من تنها نام و نسخه مرورگر را فرستاده ام.

واکشی داده های صفحه وب

در گام نخست و از طریق کدهای زیر می خواهیم زمان آخرین بروز رسانی جدول رده بندی را پیدا کنیم. مطابق شکل زیر این تاریخ در تگ div با کلاس fi-selected-item وجود دارد، پس از متد ()find استفاده خواهیم کرد. همچنین ما متن میان تگ div را نیاز داریم، پس از خصوصیت text استفاده کرده ایم. شکل زیر سورس مربوط به صفحه را نشان می دهند.

پس از انجام گام بالا، نوبت به واکشی داده های درون جدول می رسد. rank-table نام شناسه (id) جدولی است که رده بندی را در خود نگه می دارد. در شکل های زیر سورس مربوط به این جدول نگهداری شده است. همانطور که در کدهای زیر می بینید ما به دنبال بخش tbody آن هستیم. به عبارت دیگر دنبال تمامی تگ های tr (تمامی سطرهای) درون آن هستیم، پس توسط کدهای زیر نخست خود جدول را بوسیله شناسه واکشی می کنیم و سپس تمامی tr ها را از درون بخش tbody آن واکشی کرده ایم.

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

اگر به شکل دوم بالا نگاه کنید می بینید که یک کاراکتر n\ میان رشته های تمامی عنصرهای دوم تمامی لیست ها وجود دارد، پس در نهایت بهتر است که با بازنویسی کد زیر آنها را از میان ببریم. توجه کنید عنصر اول درون لیست شماره رده بندی، عنصر دوم نام کشور و کد کوتاه شده کشور (مانند IRN برای ایران)، عنصر سوم امتیاز کنونی و عنصر چهارم امتیاز پیشین است. عنصر پنجم اندازه تغییر است که می تواند عددی منفی یا مثبت باشد. در کد زیر کاراکتر – (کاراکتر منفی) با کاراکتر n\ جایگزین شده است.

دانلود سورس برنامه این مطلب Find fifa word ranking table men