Json

jinkyung·2021년 3월 18일
0

Python

목록 보기
19/19
post-custom-banner

json 하나 = dictionary
json 배열 = list
loads라는 함수를 통해 json 문자열을 파이썬 객체로 쓸 수 있다.



import json

json_str = """
[
    {"name":"홍길동","age":"32"},
    {"name":"임꺽정","age":"43"}
]
"""

json_obj = json.loads(json_str)
print(type(json_obj), json_obj)
print(type(json_obj[0]), json_obj[0])
print(type(json_obj[1]), json_obj[1])
print(json_obj[0:2])

import json

json_str = """
[
    {"name":"홍길동","age":"32"},
    {"name":"임꺽정","age":"43"}
]
"""

json_obj = json.loads(json_str)

for person in json_obj:
    print(person["name"] + "," + person["age"])


naver api 이용하여 검색 결과 가져오기

import os
import sys
import urllib.request
client_id = "_DAnhadrIPU0qOHagokk"
client_secret = "Z7chYt24Fv"

while True:
    input_str = input("검색할 단어 입력 : ")
    if input_str == "<exit>":
        break
    encText = urllib.parse.quote(input_str)
    url = "https://openapi.naver.com/v1/search/blog?query=" + encText # json 결과
    # url = "https://openapi.naver.com/v1/search/blog.xml?query=" + encText # xml 결과
    request = urllib.request.Request(url)
    request.add_header("X-Naver-Client-Id",client_id)
    request.add_header("X-Naver-Client-Secret",client_secret)
    response = urllib.request.urlopen(request)
    rescode = response.getcode()
    if(rescode==200):
        response_body = response.read()
        print(response_body.decode('utf-8'))
        print("=" * 60, end="\n\n\n")
    else:
        print("Error Code:" + rescode)


import requests
import json
import urllib

url = "https://openapi.naver.com/v1/search/blog?query="
client_id = "UmSKNm6SuI1UzNPGPQ39"
client_secret = "oLW4bNKt9F"

while True:
    input_str = input("검색할 단어 입력 : ")
    if input_str == "<exit>":
        break
    encText = urllib.parse.quote(input_str)
    url += encText
    result = requests.get(urllib.parse.urlparse(url).geturl(),
                      headers={"X-Naver-Client-Id":client_id,
                               "X-Naver-Client-Secret":client_secret})
    result_obj = result.json()
    print(result_obj)
    print("=" * 70, end="\n\n\n")

출력했을 때 결과를 알아보기가 어렵다.
이 때 디버깅을 하면 쉽게 볼 수 있다.

혹은 json tree를 이용할 수 있다.


display를 100으로 줬을 때

while True:
    input_str = input("검색할 단어 입력 : ")
    if input_str == "<exit>":
        break
    encText = urllib.parse.quote(input_str)
    url += encText
    # 100개까지 보여주도록
    url += "&display=100"
    result = requests.get(urllib.parse.urlparse(url).geturl(),
                      headers={"X-Naver-Client-Id":client_id,
                               "X-Naver-Client-Secret":client_secret})
    result_obj = result.json()
    print(result_obj)
    print("=" * 70, end="\n\n\n")


json.dumps() : 객체를 문자열로 바꾸기

import requests
import json
import urllib
import time

url = "https://openapi.naver.com/v1/search/blog?query="
client_id = "UmSKNm6SuI1UzNPGPQ39"
client_secret = "oLW4bNKt9F"

while True:
    input_str = input("검색할 단어 입력 : ")
    if input_str == "<exit>":
        break
    search_li = []
    for i in range(1, 201, 100):
        encText = urllib.parse.quote(input_str)
        url += encText
        url += "&display=100"
        url += "&start=" + str(i)
        print(url)
        result = requests.get(urllib.parse.urlparse(url).geturl(),
                          headers={"X-Naver-Client-Id":client_id,
                                   "X-Naver-Client-Secret":client_secret})
        result_obj = result.json()
        result_str = json.dumps(result_obj)
        print(type(result_str), result_str)
        search_li.append(result_obj)
        print("{} ~ {} 네이버 검색 수집".format(i, i+100))
        time.sleep(0.5)

    print(search_li)

# Google에 json tree
#          online json viewer


파일 저장

import requests
import json
import urllib
import time

url = "https://openapi.naver.com/v1/search/blog?query="
client_id = "UmSKNm6SuI1UzNPGPQ39"
client_secret = "oLW4bNKt9F"

def save_csv(json_obj):
    """,구분자로 가공해서 엑셀에서 볼 수 있도록 한다"""
    item_li = json_obj["items"]
    fp = open("naver_search.csv", "w", encoding="utf-8")
     #문서에 제목을 쓰기 위해 tilte, link, description과 같은 key 값을 뽑아낸다.
    column_li = item_li[0].keys()
    for column in column_li:
        fp.write(column)
        fp.write(",")
    fp.write("\n")
    for item in item_li:
        for column in column_li:
            fp.write(item[column].replace("<b>", "")
                                 .replace("</b>", "")
                                 .replace(",", " ")
                                 .strip())
            fp.write(",")
        fp.write("\n")

    fp.close()

def save_json(json_obj):
    """json문자열로 저장한 파일을 json.loads함수로 json object로 복원할 수 있다"""
    json_str = json.dumps(json_obj)
    with open("naver_search.json", "w", encoding="utf-8") as f:
        f.write(json_str)

input_str = input("검색할 단어 입력 : ")
encText = urllib.parse.quote(input_str)
url += encText
url += "&display=100"
print(url)
result = requests.get(urllib.parse.urlparse(url).geturl(),
                  headers={"X-Naver-Client-Id":client_id,
                           "X-Naver-Client-Secret":client_secret})
result_obj = result.json()
print(result_obj)

save_json(result_obj)
save_csv(result_obj)

# Google에 json tree
#          online json viewer
post-custom-banner

0개의 댓글