کتابخانه Requests یکی از بخش جدایی ناپذیر پایتون برای ایجاد درخواست های HTTP به یک URL مشخص است. از کتابخانه requests برای ارسال درخواست به REST API یا صفحات وب استفاده میشود. همچنین در زمان Web Scrapping میتوانید از ماژول requests پایتون استفاده کنید. هنگامی که با requests یک درخواست به یک URI ارسال میکنید، یک پاسخ را برمی گرداند. ماژول requests پایتون توابع داخلی برای مدیریت درخواست و پاسخ ارائه می دهد.

 

کتابخانه Requests یک API ساده برای تعامل با عملیات HTTP مانند GET، POST و غیره فراهم می کند. همچنین از ارسال اطلاعات اضافی به سرور وب از طریق پارامترها و هدرها، رمزگذاری پاسخ سرور، شناسایی خطاها و مدیریت تغییر مسیرها پشتیبانی می کند. کتابخانه Requests علاوه بر ساده‌سازی نحوه کار با عملیات HTTP، برخی از ویژگی‌های پیشرفته مانند مدیریت استثناهای HTTP و احراز هویت را ارائه می‌کند که در این آموزش به آنها خواهیم پرداخت.

 

 

پروتکل http چیست؟

پروتکل انتقال ابرمتن (HTTP) یک پروتکل درخواست/پاسخ مبتنی بر معماری سرویس گیرنده-سرور است که برای تبادل پیام‌های درخواست و پاسخ به اتصالات TCP/IP متکی است. کلاینت‌های HTTP مانند مرورگرهای وب یا برنامه‌های تلفن همراه درخواست‌هایی را به سرور HTTP ارسال می‌کنند و سرور با پیام‌هایی حاوی خط وضعیت، سرصفحه و بدنه به آنها پاسخ می‌دهد. برای اطلاعات بیشتر میتوانید ویدیو آموزش پروتکل HTTP را مشاهده کنید.

 

 

نصب کتابخانه requests پایتون

قبل از شروع به کار با کتابخانه requests پایتون، ابتدا باید آن را نصب کنید. برای نصب کتابخانه requests پایتون با ابزار pip، دستور زیر را در ترمینال وارد کنید:

pip install requests

 

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

git clone git://github.com/psf/requests.git

 

 

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

ارسال درخواست http با ماژول requests پایتون بسیار ساده است. در قدم اول این کتابخانه را ایمپورت کنید:

>>> import requests

 

حالا میتوانید درخواست های خود را ارسال کنید. در کد زیر یک درخواست GET به صفحه اصلی وبسایت ویکی پدیا ارسال میکنیم:

>>> r = requests.get('wikipedia.org/')

 

بعد از این که درخواست را ارسال کردید یک آبجکت Response به شما برگشت داده میشود که حاوی اطلاعات url درخواست شده است.

 

کتابخانه requests متدهای مختلفی برای ارسال انواع درخواست http دارد. به طور مثال اگر بخواهید یک درخواست POST ارسال کنید، میتوانید به شکل زیر کار کنید:

>>> r = requests.post('wikipedia.org/')

 

بسیار ساده است. همچنین بقیه متدهای http نیز به شرح زیر هستند:

>>> r = requests.put('wikipedia.org/')
>>> r = requests.delete('wikipedia.org/')
>>> r = requests.head('wikipedia.org/')
>>> r = requests.options('wikipedia.org/')

 

بعد از ارسال درخواست و گرفتن پاسخ میتوانید به اطلاعات صفحه درخواست شده دسترسی داشته باشید. میتوانید با استفاده از تابع dir پایتون تمام اطلاعاتی که در آبجکت Response وجود دارد را ببینید:

>>> dir(r)
['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', '_next', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'next', 'ok', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url']

 

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

>>> r.url
https://www.wikipedia.org/

 

و یا برای دسترسی به کد وضعیت درخواست:

>>> r.status_code
200

 

همیچنین برای دسترسی به سورس کد صفحه میتوانید به شکل زیر کار کنید:

>>> r.text
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
...
...
...

 

 

ارسال پارامتر در URL با کتابخانه requests پایتون

در بسیاری از مواقع نیاز است که در کنار درخواست خود چند پارامتر نیز ارسال کنید. اگر URL را به صورت دستی میسازید این پارامترها به صورت جفت key-value پس از علامت سوال قرار میگیرند. کتابخانه requests به شما اجازه میدهد این پارامترها را به عنوان یک دیکشنری تحت عنوان params ارسال کنید. به عنوان مثال:

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)

 

میتوانید با چاپ کردن URL از درستی این پارامترها مطمئن شوید:

>>> print(r.url)
https://httpbin.org/get?key2=value2&key1=value1

 

دقت کنید که اگر در دیکشنری مقدار یک کلید None باشد، در URL قرار نمیگیرد. همچنین میتوانید لیستی از آیتم ها را نیز ارسال کنید:

>>> payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> print(r.url)
https://httpbin.org/get?key1=value1&key2=value2&key2=value3

 



0

intro

3:17

رایگان

1

requests

8:29

رایگان

2

Beautiful Soup

18:21

3

got example

18:17

4

hacker news

19:21

5

querystring

21:26

6

login

17:36

7

headers

10:38

8

cookie

17:22

10

scrapy

16:47

11

selectors

21:41

12

items

30:12

13

pipeline

15:18

14

follow

14:7

15

Requests

9:51

16

LinkExtractor

10:10

17

Rule

17:20

18

FormRequest

16:57

19

download files

10:18

20

Feeds

11:40

21

middleware

22:14

22

splash

12:37

23

done

3:2

دوره های پیشنهادی

دوره آموزش دیتابیس پستگرس (postgresql)
دوره آموزش دیتابیس پستگرس (postgresql)
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش ردیس(redis)
دوره آموزش ردیس(redis)
تکمیل ضبط
امیرحسین بیگدلو
دوره آموزش pandas پایتون
دوره آموزش pandas پایتون
تکمیل ضبط
امیرحسین بیگدلو



ارسال نظر


علیرضا مجاهدی

1 سال قبل پاسخ به نظر

سلام. وقت بخیر
داخل پای چارم زمانی که دستور گت رو میزنم خطا میده و کار نمیکنه. اولش هم ایمپورت کردم ولی جواب نمیده و خطای زیر را میده.
چکارش کنم؟
Traceback (most recent call last):
File "C:\Users\Mojahedi\Documents\python\course 2\requests.py", line 1, in <module>
import requests
File "C:\Users\Mojahedi\Documents\python\course 2\requests.py", line 4, in <module>
response = requests.g
AttributeError: partially initialized module 'requests' has no attribute 'get' (most likely due to a circular import)

ارسال نظر



امیرحسین بیگدلو

1 سال قبل

سلام
به نظر میرسه که به مشکل ایمپورت حلقوی خوردی.
احتمالا در ایمپورت‌ها مشکل داری. برای اطلاعات بیشتر این مقاله رو بخون:
https://www.mongard.ir/articles/144/python-circular-imports/


Md

1 سال قبل

اسم فایلت رو نباید با اسم ماژولت یکی بزاری

باب

1 سال قبل پاسخ به نظر

درود بر امیر عزیز
بعد از مدت ها اومدم اپدیت این دوره رو ببینم ،
عالی <3
یه سوالی ، راهی هست که بشه جلوی webscraping از سایت خودمون رو بگیریم که کسی scrap نکنه ؟

ارسال نظر



امیرحسین بیگدلو

1 سال قبل

سلام
راه قطعی برای جلوگیری از web scraping وجود نداره

مونگارد