از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش دریافت JSON از URL در پایتون
سرفصلهای مطلب
معرفی
توانایی بازیابی داده ها از سرورهای راه دور یک نیاز اساسی برای اکثر پروژه ها در توسعه وب است. 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()
روش تبدیل داده های پاسخ به یک شی پایتون.
یک را هم تعریف کردیم 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