কীভাবে ওয়েব পেজ থেকে জাইসন পাইথন স্ক্রিপ্টে পাবেন get


191

আমার স্ক্রিপ্টগুলির মধ্যে একটিতে নিম্নলিখিত কোডটি পেয়েছেন:

#
# url is defined above.
#
jsonurl = urlopen(url)

#
# While trying to debug, I put this in:
#
print jsonurl

#
# Was hoping text would contain the actual json crap from the URL, but seems not...
#
text = json.loads(jsonurl)
print text

আমি যা করতে চাই তা হ'ল {{.....etc.....}}আমি যখন URL এ ফায়ারফক্সে আমার স্ক্রিপ্টটিতে এটি লোড করি তখন আমি যে স্টাফটি দেখতে পাচ্ছি তা হ'ল আমি এর থেকে কোনও মূল্য পার্স করতে পারি। আমি একটি টন গুগলড করেছি তবে পাইথন স্ক্রিপ্টের কোনও অবজেক্টে {{...}}শেষ হওয়া ইউআরএল থেকে কীভাবে জিনিসটি পাওয়া যায় সে সম্পর্কে আমি খুব ভাল উত্তর পাইনি .json

উত্তর:


313

URL থেকে ডেটা পান এবং তারপর কল json.loadsযেমন

পাইথন 3 উদাহরণ :

import urllib.request, json 
with urllib.request.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=google") as url:
    data = json.loads(url.read().decode())
    print(data)

পাইথন 2 উদাহরণ :

import urllib, json
url = "http://maps.googleapis.com/maps/api/geocode/json?address=google"
response = urllib.urlopen(url)
data = json.loads(response.read())
print data

আউটপুট এর ফলে এরকম কিছু ঘটতে পারে:

{
"results" : [
    {
    "address_components" : [
        {
            "long_name" : "Charleston and Huff",
            "short_name" : "Charleston and Huff",
            "types" : [ "establishment", "point_of_interest" ]
        },
        {
            "long_name" : "Mountain View",
            "short_name" : "Mountain View",
            "types" : [ "locality", "political" ]
        },
        {
...

30
json.loadsযেগুলি স্ট্রিং ব্যবহার গ্রহণ করে সেগুলির পরিবর্তে ( পরিবর্তে .read()এটি প্রয়োজনীয় json.load(response)
কারণই

শুধুমাত্র পিএসএল, সংক্ষিপ্ত এবং দক্ষ
জালারসি

urllib2পাইথন 2 এ কি পছন্দনীয়?
জন-এরিক

110

আমি অনুমান করব যে আপনি আসলে ইউআরএল থেকে ডেটা পেতে চান:

jsonurl = urlopen(url)
text = json.loads(jsonurl.read()) # <-- read from it

অথবা, খুঁজে বার করো তাদেরকে JSON ডিকোডার মধ্যে অনুরোধ গ্রন্থাগার।

import requests
r = requests.get('someurl')
print r.json() # if response type was set to JSON, then you'll automatically have a JSON response here...

এই প্রশ্নের জন্য সবুজ ব্যাজ প্রাপ্য! ধন্যবাদ!
আজিজ আল্টো

27

পাইথন ২ এক্স এবং পাইথন ৩. এক্স সহ ওয়েবপৃষ্ঠা থেকে এটি JSON ফর্ম্যাটে একটি অভিধান পেয়েছে:

#!/usr/bin/env python

try:
    # For Python 3.0 and later
    from urllib.request import urlopen
except ImportError:
    # Fall back to Python 2's urllib2
    from urllib2 import urlopen

import json


def get_jsonparsed_data(url):
    """
    Receive the content of ``url``, parse it as JSON and return the object.

    Parameters
    ----------
    url : str

    Returns
    -------
    dict
    """
    response = urlopen(url)
    data = response.read().decode("utf-8")
    return json.loads(data)


url = ("http://maps.googleapis.com/maps/api/geocode/json?"
       "address=googleplex&sensor=false")
print(get_jsonparsed_data(url))

আরও দেখুন: পড়ুন এবং JSON এর উদাহরণ লিখুন


24

পাইথন 3 ব্যবহার করার সময় কোনও ওয়েবপৃষ্ঠা থেকে জেএসএন পাওয়ার সবচেয়ে সহজ এবং সর্বাধিক কার্যকর উপায় হিসাবে আমি এটি পেয়েছি:

import json,urllib.request
data = urllib.request.urlopen("https://api.github.com/users?since=100").read()
output = json.loads(data)
print (output)

4
এটি কাজ করে না। আপনাকে urllib.request থেকে urlopen আমদানি করতে হবে, যেমনfrom urllib.request import urlopen
দাউদ লাসজুক

5

কলটি যা urlopen()করতে হবে ( ডক্স অনুসারে ) সেগুলি ফাইল-এর মতো কোনও বস্তু ফিরে আসে। আপনার কাছে একবার হয়ে গেলে, read()নেটওয়ার্কের JSON ডেটা আসলে টানতে আপনাকে তার পদ্ধতিটি কল করতে হবে ।

কিছুটা এইরকম:

jsonurl = urlopen(url)

text = json.loads(jsonurl.read())
print text

5

পাইথন 2 এ, json.loads () এর পরিবর্তে json.load () কাজ করবে

import json
import urllib

url = 'https://api.github.com/users?since=100'
output = json.load(urllib.urlopen(url))
print(output)

দুর্ভাগ্যক্রমে, এটি পাইথন 3 এ কাজ করে না j json.loads এর একটি স্ট্রিং অবজেক্ট এবং urllib.urlopen (url) .read () এর আউটপুট প্রয়োজন। সুতরাং পাইথন 3-তে এটি কাজ করার জন্য ফাইল এনকোডিংটি পেতে হবে।

এই উদাহরণে আমরা এনকোডিংয়ের জন্য শিরোনামগুলি জিজ্ঞাসা করি এবং যদি আমরা একটি না পাই তবে utf-8 এ ফিরে যাই। পাইথন 2 এবং 3 এর মধ্যে শিরোনামের অবজেক্ট আলাদা হয় তাই এটি বিভিন্ন উপায়ে করতে হয়। অনুরোধগুলি ব্যবহার করা এগুলি এড়াতে পারে তবে কখনও কখনও আপনাকে স্ট্যান্ডার্ড লাইব্রেরিতে আটকাতে হবে।

import json
from six.moves.urllib.request import urlopen

DEFAULT_ENCODING = 'utf-8'
url = 'https://api.github.com/users?since=100'
urlResponse = urlopen(url)

if hasattr(urlResponse.headers, 'get_content_charset'):
    encoding = urlResponse.headers.get_content_charset(DEFAULT_ENCODING)
else:
    encoding = urlResponse.headers.getparam('charset') or DEFAULT_ENCODING

output = json.loads(urlResponse.read().decode(encoding))
print(output)

আমি জানি ছয়টি স্ট্যান্ডার্ড লাইব্রেরির অংশ নয় তবে এটি সুবিধার জন্য এখানে প্রদর্শিত হয়েছে। এটি ছাড়া আপনার urlopen () কোথায় পাবেন তা নির্ধারণ করার জন্য আপনার / অন্য কোনও প্রয়োজন বা ব্লকটি বাদ দিয়ে চেষ্টা করুন।
এভিসো

3

জাসনকে পার্স করার জন্য অতিরিক্ত লাইব্রেরি ব্যবহার করার দরকার নেই ...

json.loads()একটি ফেরৎ অভিধান

সুতরাং আপনার ক্ষেত্রে, ঠিক না text["someValueKey"]


3

দেরিতে উত্তর, তবে python>=3.6আপনার ব্যবহারের জন্য:

import dload
j = dload.json(url)

এর সাথে ইনস্টল করুন dload:

pip3 install dload

-1

আপনি ব্যবহার করতে পারেন json.dumps:

import json

# Hier comes you received data

data = json.dumps(response)

print(data)

জেসন লোড করার জন্য এবং ফাইলটিতে এটি লিখতে নিম্নলিখিত কোডটি দরকারী:

data = json.loads(json.dumps(Response, sort_keys=False, indent=4))
with open('data.json', 'w') as outfile:
json.dump(data, outfile, sort_keys=False, indent=4)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.