Arsham Roshannejad
Arsham Roshannejad
خواندن ۹ دقیقه·۲ سال پیش

کتابخانه requests در پایتون

اول از همه request چیست؟

در دنیای وب، request دستورالعمل یا پیامی است که client برای دریافت اطلاعات یا انجام عملی به سرور ارسال می کند.

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

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

درخواست‌ها و پاسخ‌ها بلوک‌های ساختمانی اصلی ارتباطات وب هستند و برای عملکرد وب‌سایت‌ها، برنامه‌های کاربردی وب و سایر خدمات آنلاین ضروری هستند.

تاریخ

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

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

با گذشت زمان، بسیاری از پروتکل ها و فن آوری های دیگر برای تکمیل HTTP و فعال کردن برنامه های کاربردی وب پیچیده تر مانند JavaScript، XML، REST و WebSocket توسعه یافته اند. تکامل فناوری های وب امکان توسعه برنامه های کاربردی وب قدرتمند و تعاملی را فراهم کرده است که بسیاری از جنبه های زندگی روزمره ما را متحول کرده است.

ابزارها

ابزارهای مختلفی وجود دارد که می توانید از آنها برای درخواست در دنیای وب استفاده کنید. در اینجا چند ابزار رایج وجود دارد:

مرورگرهای وب: مرورگرهای وب مانند گوگل کروم، فایرفاکس و سافاری به شما این امکان را می دهند که با تایپ یک URL در نوار آدرس یا کلیک بر روی یک لینک، درخواست خود را ارسال کنید. مرورگر درخواستی را به سرور ارسال می کند، سپس سرور اطلاعات درخواستی را که در مرورگر نمایش داده می شود، پس می فرستد.

ابزار cURL یک ابزار خط فرمان است که به شما امکان می دهد با استفاده از پروتکل های مختلف از جمله HTTP، FTP، SMTP و غیره، درخواست هایی را به سرورها ارسال کنید. از cURL می توان برای تست API ها، دانلود فایل ها و انجام سایر وظایف مرتبط با وب استفاده کرد.

ابزار Postman یک ابزار محبوب توسعه API است که به شما امکان می دهد درخواست های HTTP از جمله GET، POST، PUT، DELETE و غیره را ایجاد و تست کنید. با Postman می‌توانید داده‌های پاسخ را مشاهده کنید، header ها را تنظیم کنید و کارهای پیشرفته دیگر را انجام دهید.

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

اینها تنها چند نمونه از ابزارهای موجود برای درخواست در دنیای وب هستند. بسته به نیاز شما، ممکن است ابزارهای دیگری وجود داشته باشند که برای مورد استفاده خاص شما مناسب تر باشند.

در اینجا مثالی از نحوه استفاده از cURL برای درخواست HTTP GET برای بازیابی اطلاعات از یک وب سایت آورده شده است:

curl https://www.example.com

این دستور یک درخواست HTTP GET را به آدرس https://www.example.com ارسال می کند و پاسخ سرور را در ترمینال نمایش می دهد.

همچنین می‌توانید گزینه‌های دیگری را برای سفارشی‌سازی درخواست به دستور cURL اضافه کنید. به عنوان مثال، می توانید از گزینه -H برای اضافه کردن هدر به درخواست استفاده کنید:

curl -H "Accept: application/json" https://api.example.com/data

در این مثال، گزینه -H هدر Accept را روی "application/json" تنظیم می کند، که نشان می دهد client انتظار دارد داده های با فرمت JSON را در پاسخ دریافت کند. URL https://api.example.com/data نقطه endpoint یک API است که داده های JSON را برمی گرداند.

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

Requests Library

کتابخانه Requests یک کتابخانه محبوب پایتون برای ایجاد درخواست های HTTP است. با ارائه یک API کاربرپسند که بسیاری از جزئیات سطح پایین کار با HTTP را حذف می کند، فرآیند ایجاد درخواست های HTTP و مدیریت داده های پاسخ را ساده می کند.

با Requests می توانید انواع مختلفی از درخواست ها از جمله GET، POST، PUT، DELETE و غیره را ایجاد کنید و به راحتی داده های پاسخ را در قالب های مختلف مانند JSON، XML و متن مدیریت کنید.

کتابخانه Requests برای انواع وظایف مربوط به ایجاد درخواست های HTTP در پایتون مفید است. در اینجا چند مورد استفاده رایج وجود دارد که در آن درخواست ها می توانند مفید باشند:


وب اسکرپینگ: از Requests می‌توان برای دریافت محتوای HTML از وب‌سایت‌ها استفاده کرد، که سپس می‌توان آن‌ها را با استفاده از کتابخانه‌های دیگر Python مانند Beautiful Soup یا Scrapy تجزیه و تحلیل کرد.

توسعه API: از درخواست‌ها می‌توان برای ایجاد و تست درخواست‌های HTTP به APIهای وب استفاده کرد، که توسعه و دیباگ کلاینت‌های API را آسان‌تر می‌کند.

استخراج داده ها: از درخواست ها می توان برای دریافت داده ها از API های وب یا سایر سرویس های وب استفاده کرد و آن را به قالبی تبدیل کرد که برای برنامه شما مفیدتر است.

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

دیباگ: از درخواست ها می توان با بررسی header ها و محتوای درخواست ها و پاسخ ها برای دیباگ کردن برنامه های وب استفاده کرد.


بیاید از requests استفاده کنیم

برای ایجاد یک محیط مجازی (venv) در پایتون، می توانید مراحل زیر را دنبال کنید:

یک خط فرمان یا پنجره ترمینال را باز کنید.

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

برای ایجاد یک محیط مجازی جدید دستور زیر را اجرا کنید:

در ویندوز:

python -m venv myvenv

در Linux/MacOS:

python3 -m venv myenv

در اینجا myenv نام محیط مجازی شماست. شما می توانید از هر نامی که دوست دارید استفاده کنید.

منتظر بمانید تا محیط مجازی ایجاد شود. این ممکن است چند لحظه طول بکشد.

پس از ایجاد محیط مجازی، می توانید با اجرای دستور زیر آن را فعال کنید:

در ویندوز:

myenv\Scripts\activate

در Linux/MacOS:

source myenv/bin/activate

پس از فعال سازی محیط مجازی، می توانید هر پکیج ای را که نیاز دارید با استفاده از pip نصب کنید، بدون اینکه روی پکیج های نصب شده به صورت کلی بر روی سیستم خود تاثیری داشته باشید. پس از اتمام کار با محیط مجازی، می توانید با اجرای دستور deactivate، آن را غیرفعال کنید.

برای نصب requests و BeautifulSoup در محیط مجازی خود دستور زیر را برای نصب requests و BeautifulSoup با استفاده از pip اجرا کنید:

pip install requests beautifulsoup4

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

اکنون یک فایل main.py ایجاد کنید و یک برنامه ساده مینویسیم که وب سایت ها را scrape می کند.

یک اسکریپت پایتون نوشتیم که محتوای یک وب سایت را اسکرپ می کند و آن را در یک فایل ذخیره می کند. در ادامه نحوه کار این کد گام به گام آورده شده است:

  • اسکریپت ماژول های لازم را وارد می کند: sys برای خواندن آرگومان های خط فرمان، requests برای ایجاد درخواست های HTTP به وب سایت، و BeautifulSoup برای تجزیه محتوای HTML.


  • تابع read_arguments آرگومان های خط فرمان ارسال شده به اسکریپت را دریافت می کند و سه مقدار را برمی گرداند: URL وب سایت برای اسکرپ، تگ کلاس HTML برای جستجو در محتوا برگردانده شده توسط کتابخانه requests و نام فایل برای ذخیره محتوا.


  • تابع get_website_contents آدرس وب سایت را می گیرد و از ماژول requests برای ارسال درخواست GET به وب سایت استفاده می کند. اگر درخواست موفقیت آمیز باشد، تابع محتوای خام HTML وب سایت را برمی گرداند. اگر خطایی وجود داشته باشد، تابع پیغام خطا را چاپ می کند و None را برمی گرداند.


  • تابع scrape_between_tags محتوای HTML خام وب سایت و تگ کلاس را برای جستجو می گیرد. از ماژول BeautifulSoup برای تجزیه HTML و پیدا کردن اولین عنصر با کلاس مشخص شده استفاده می کند. اگر عنصر پیدا شود، تابع محتوای متنی عنصر را با حذف فضای خالی اصلی و انتهایی برمی‌گرداند. اگر عنصر پیدا نشد، تابع پیامی را چاپ می‌کند و None را برمی‌گرداند.


  • تابع write_content_to_file محتوایی را که باید ذخیره شود و نام فایل را در آن ذخیره می کند. محتوا را به یک آرایه بایت تبدیل می کند و با استفاده از دستور with آن را در فایل می نویسد. اگر خطایی وجود داشته باشد، تابع یک پیام خطا چاپ می کند.


  • بلوک main اسکریپت بررسی می کند که آیا متغیر __name__ برابر با '__main__' است یا خیر. این برای اطمینان از اینکه کد موجود در بلوک اصلی فقط زمانی اجرا می شود که اسکریپت مستقیما اجرا می شود و نه زمانی که به عنوان یک ماژول وارد می شود، استفاده می شود.


  • بلوک main تابع read_arguments را برای دریافت URL، تگ کلاس و نام فایل از آرگومان های خط فرمان فراخوانی می کند و تابع scrape_between_tags را برای استخراج محتوا بین تگ های کلاس مشخص شده فراخوانی می کند و تابع get_website_contents را برای دریافت محتوای خام HTML وب سایت فراخوانی می کند.


  • بلوک main بررسی می‌کند که آیا URL و تگ کلاس None نیستند. اگر یکی از آنها None باشد، پیامی را چاپ می کند و از اسکریپت خارج می شود.


  • بلوک main بررسی می کند که آیا محتوا هیچ است یا خیر. اگر چنین باشد، پیامی را چاپ می کند و از اسکریپت خارج می شود.


  • بلوک main بررسی می‌کند که آیا نام فایل None نیست. اگر None نباشد، تابع write_content_to_file را فراخوانی می کند تا محتوا را در فایل مشخص شده ذخیره کند.


اگر نام فایل None باشد، اسکریپت حلقه‌ای را وارد می‌کند که از کاربر می‌خواهد نام فایل را برای ذخیره محتوا وارد کند. اگر کاربر یک نام فایل معتبر وارد کند، اسکریپت تابع write_content_to_file() را برای ذخیره محتوا در فایل فراخوانی می کند و از حلقه خارج می شود. اگر کاربر یک رشته خالی را وارد کند، اسکریپت از کاربر می خواهد که نام فایل را دوباره وارد کند. اگر کاربر 'q' یا 'Q' را وارد کند، اسکریپت از حلقه خارج می شود و اسکریپت به پایان می رسد.


بیاید این اسکریپت رو تست کنیم:


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