[python] 웹 페이지에서 Python 스크립트로 JSON을 얻는 방법

내 스크립트 중 하나에 다음 코드가 있습니다.

#
# 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.....}}Firefox에서 스크립트로로드 할 때 URL에서 볼 수있는 것을 가져 와서 값을 구문 분석 할 수 있다는 것입니다. 나는 톤을 Google로 만들었지 만 실제로 는 파이썬 스크립트의 객체로 {{...}}끝나는 URL 에서 물건을 얻는 방법에 대한 좋은 대답을 찾지 못했습니다 .json.



답변

URL에서 데이터를 가져온 다음 json.loads예를 들어

Python3 예제 :

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)

Python2 예 :

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" ]
        },
        {
...


답변

실제로 URL에서 데이터를 가져오고 싶다고 생각합니다.

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...


답변

Python 2.X 및 Python 3.X가 포함 된 웹 페이지에서 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 읽기 및 쓰기 예제 도 참조하십시오.


답변

파이썬 3을 사용할 때 웹 페이지에서 JSON을 얻는 가장 쉽고 효율적인 방법이라는 것을 알았습니다.

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


답변

docsurlopen() 에 따른 호출은 모두 파일과 같은 객체를 반환합니다. 일단 당신이 그것을 호출해야합니다read() 실제로 네트워크를 통해 JSON 데이터를 가져 오기 메소드를 합니다.

다음과 같은 것 :

jsonurl = urlopen(url)

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


답변

Python 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에서 작동하지 않습니다. json.load는 파일과 같은 객체에 대해 read ()를 호출하는 json.loads의 래퍼입니다. json.loads에는 문자열 객체가 필요하고 urllib.urlopen (url) .read ()의 출력은 bytes 객체입니다. 따라서 파이썬 3에서 작동하려면 파일 인코딩을 가져와야합니다.

이 예제에서 우리는 인코딩을 위해 헤더를 쿼리하고 그것을 얻지 못하면 utf-8로 넘어갑니다. headers 객체는 Python 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)


답변

json을 구문 분석하기 위해 추가 라이브러리를 사용할 필요가 없습니다 …

json.loads()사전을 반환합니다 .

따라서 귀하의 경우에는 text["someValueKey"]