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

سرور مجازی NVMe

روش دریافت JSON از URL در پایتون

0 23
زمان لازم برای مطالعه: 5 دقیقه


معرفی

توانایی بازیابی داده ها از سرورهای راه دور یک نیاز اساسی برای اکثر پروژه ها در توسعه وب است. JSON احتمالاً یکی از محبوب‌ترین فرمت‌ها برای تبادل داده‌ها به دلیل ساختار سبک و قابل درک آن است که تجزیه آن نسبتاً آسان است. پایتون که یک زبان همه کاره است، راه‌های مختلفی برای واکشی داده‌های JSON از URL در پروژه وب شما ارائه می‌کند.

در این مقاله، روش استفاده از پایتون برای بازیابی داده های JSON از URL را بررسی خواهیم کرد. ما دو کتابخانه محبوب را پوشش خواهیم داد – requests و urllibو روش استخراج و تجزیه داده های JSON را با استفاده از داخلی پایتون نشان می دهد json مدول. علاوه بر این، خطاهای رایجی که ممکن است هنگام واکشی داده‌های JSON رخ دهد و روش مدیریت آنها در کدتان را مورد بحث قرار خواهیم داد.

با استفاده از درخواست ها کتابخانه

یکی از کتابخانه های محبوب برای واکشی داده ها از URL ها در پایتون است requests. این یک رابط کاربری آسان برای ارسال درخواست های HTTP برای بازیابی داده ها از سرورهای راه دور فراهم می کند. برای استفاده requests، ابتدا باید با استفاده از آن را نصب کنید pip در شما terminal:

$ pip install requests

یک بار که داریم requests نصب شده است، می‌توانیم از آن برای واکشی داده‌های JSON از یک URL با استفاده از آن استفاده کنیم get() روش. فرض کنید می‌خواهیم پست‌هایی را از API ساختگی که نامیده می‌شود واکشی کنیم jsonplaceholder.typicode.com/posts:


import requests


response = requests.get('https://jsonplaceholder.typicode.com/posts')


data = response.json()
print(data)

ما استفاده کردیم get() روشی برای واکشی داده های JSON از URL https://jsonplaceholder.typicode.com/posts، داده های JSON را با استفاده از json() روش، و آن را در console. و این تقریباً همین است! پاسخ JSON را دریافت خواهید کرد که به عنوان یک لیست پایتون ذخیره می شود و هر پست با یک فرهنگ لغت در آن لیست نمایش داده می شود. به عنوان مثال، یک پست به عنوان فرهنگ لغت زیر نشان داده می شود:

{
    'userId': 1, 
    'id': 1, 
    'title': 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', 
    'body': 'quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto'
} 

اما، اگر درخواست API یک را برگرداند چه می شود خطا? خوب، ما با بررسی کد وضعیتی که از API هنگام ارسال درخواست GET دریافت کرده ایم، این خطا را کنترل می کنیم:


import requests


response = requests.get('https://jsonplaceholder.typicode.com/posts')



if response.status_code == 200:
    data = response.json()
    print(data)
else:
    
    print('Error fetching data')

علاوه بر کاری که قبلا انجام داده‌ایم، کد وضعیت پاسخ را بررسی کردیم تا اطمینان حاصل کنیم که درخواست موفق بوده است. اگر کد وضعیت است 200، ما print JSON استخراج شده به همان روش قبلی، و اگر کد وضعیت نیست 200 ما پیغام خطا میدهیم

توجه داشته باشید: اینrequests کتابخانه به طور خودکار پاسخ های JSON را رمزگشایی می کند، بنابراین نیازی به استفاده از آن ندارید json ماژول برای تجزیه پاسخ. در عوض، شما می توانید استفاده کنید json() روش شی پاسخ برای استخراج داده های JSON به عنوان فرهنگ لغت یا فهرست پایتون:

data = response.json()

این روش الف را بالا می برد ValueError اگر بدنه پاسخ حاوی JSON معتبر نباشد.

پیشنهاد می‌کنیم بخوانید:  روش استفاده از لیست ها در پایتون – با مثال کد توضیح داده شده است

با استفاده از urllib کتابخانه

پایتون داخلی urllib کتابخانه یک راه ساده برای واکشی داده ها از URL ها ارائه می دهد. برای واکشی داده‌های JSON از یک URL، می‌توانید از آن استفاده کنید urllib.request.urlopen() روش:


import json
from urllib.request import urlopen


response = urlopen('https://jsonplaceholder.typicode.com/posts')

if response.getcode() == 200:
    
    data = json.loads(response.read().decode('utf-8'))
    
    for post in data:
        print(post('title'))
else:
    print('Error fetching data')

پس از واکشی JSON از URL انتخابی API، کد وضعیت پاسخ را بررسی کردیم تا مطمئن شویم درخواست موفقیت آمیز بوده است. اگر کد وضعیت است 200، داده های JSON را با استفاده از json.loads() روش و print عنوان هر پست

شایان ذکر است که urllib به طور خودکار بدنه های پاسخ را رمزگشایی نمی کند، بنابراین باید از آن استفاده کنیم decode() روش رمزگشایی پاسخ به یک رشته سپس از json.loads() روش تجزیه داده های JSON:

data = json.loads(response.read().decode('utf-8'))

با استفاده از aiohttp کتابخانه

بعلاوه urllib و requests، کتابخانه دیگری وجود دارد که معمولاً برای ایجاد درخواست های HTTP در پایتون استفاده می شود – aiohttp. این یک کتابخانه HTTP مشتری/سرور ناهمزمان برای پایتون است که با استفاده از آن امکان درخواست‌های کارآمدتر و سریع‌تر را فراهم می‌کند. asyncio.

برای استفاده aiohttp، باید با استفاده از آن نصب کنید pip:

$ pip install aiohttp

پس از نصب، می توانید شروع به استفاده از آن کنید. بیایید داده های JSON را از یک URL با استفاده از aiohttp کتابخانه:


import aiohttp
import asyncio
import json


async def fetch_json(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            data = await response.json()
            return data

async def main():
    url = 'https://jsonplaceholder.typicode.com/posts'
    data = await fetch_json(url)
    print(json.dumps(data, indent=4))

asyncio.run(main())

ما یک را تعریف کردیم async تابع fetch_json که یک URL را به عنوان ورودی می گیرد و استفاده می کند aiohttp برای درخواست HTTP GET به آن URL. سپس از آن استفاده کردیم response.json() روش تبدیل داده های پاسخ به یک شی پایتون.

پیشنهاد می‌کنیم بخوانید:  ابزارهای تکرار پایتون: filter()، islice()، map() و zip()

یک را هم تعریف کردیم async تابع main که به سادگی تماس می گیرد fetch_json با یک URL و داده های JSON حاصل را چاپ می کند.

در نهایت از آن استفاده کردیم asyncio.run() تابع برای اجرای main عملکرد و داده های JSON را به صورت ناهمزمان واکشی می کند.

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

کدام کتابخانه را انتخاب کنیم؟

هنگام انتخاب یک کتابخانه برای دریافت داده های JSON از یک URL در پایتون، تصمیم اغلب به نیازهای خاص پروژه شما بستگی دارد. در اینجا چند دستورالعمل کلی وجود دارد که باید در نظر بگیرید:

  • برای درخواست های ساده یا کد قدیمی: اگر درخواست‌های ساده می‌کنید یا با کدهای قدیمی کار می‌کنید، urllib ممکن است به دلیل ماهیت داخلی و سازگاری با نسخه های قدیمی پایتون انتخاب خوبی باشد.
  • برای سهولت استفاده: اگر سهولت استفاده و سادگی در اولویت هستند، requests اغلب انتخاب ارجح است. این یک نحو کاربر پسند دارد و بسیاری از ویژگی‌های مفید را ارائه می‌کند که واکشی داده‌های JSON از URL را آسان می‌کند.
  • برای کارایی بالا و مقیاس پذیری: اگر برنامه شما نیاز به ارسال تعداد زیادی درخواست HTTP دارد یا به زمان پاسخگویی سریع‌تر نیاز دارد، aiohttp ممکن است بهترین انتخاب باشد مدیریت درخواست ناهمزمان را ارائه می دهد و برای عملکرد بهینه شده است.
  • برای سازگاری با دیگر asyncioکد مبتنی بر: اگر قبلاً استفاده می کنید asyncio در پروژه خود و یا اگر به سازگاری با دیگران نیاز دارید asyncioکد مبتنی بر، aiohttp ممکن است به دلیل پشتیبانی داخلی آن بهترین انتخاب باشد asyncio.

نتیجه

دریافت داده های JSON از URL یک کار رایج در پایتون است و چندین کتابخانه برای این منظور در دسترس است. در این مقاله، ما سه کتابخانه محبوب برای درخواست HTTP را بررسی کرده‌ایم: urllib، requests، و aiohttp.

urllib ساخته شده است و برای درخواست های ساده تر یا کدهای قدیمی مناسب است، در حالی که requests یک رابط کاربر پسندتر و قوی تر ارائه می دهد. aiohttp برای برنامه‌های ناهمزمان با کارایی بالا و مقیاس‌پذیری بهینه‌سازی شده است، و به‌ویژه برای برنامه‌هایی که نیاز به تعداد زیادی درخواست HTTP دارند یا به زمان پاسخ‌دهی سریع‌تری نیاز دارند، مفید است.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-01 09:14:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید