2014-12-06 3 views
-1

나는 coursera의 모든 저주를 나열하는 Public API을 사용하고 있습니다. json은 약 8MB입니다. 자, 내 질문은 json을 효율적으로 구문 분석하고 내 DB에 내용을 저장하는 방법입니다.큰 JSON - 파이썬 구문 분석

여기 내 코드입니다 : -

import requests 
r = requests.get('https://www.coursera.org/maestro/api/topic/list2') # Is getting all the information at once, the standard way of doing it or should I get in chunks? 
print r.json() 

# Now to save the details, should I use a NoSQL DB. 
# I've little experience of using a NoSQL DB, hence for building an app that list all coursera courses, 
# saving data inside a Mongo will be a good choice or not. 

감사

+0

너무 넓은 질문입니다. 당신은 이미 그것을 파싱했고 그것을 저장하는 수천 가지 방법이 있습니다. – tdelaney

+0

몇 가지 조사를 해보십시오 : 다양한 종류의 NoSQL 데이터베이스에 대해 배우고, 해당 기능을 응용 프로그램이 필요로하는 것과 비교하고, 하나를 선택하고 Python과 함께 사용하는 방법을 배웁니다. – Jesper

답변

2

내가 NoSQL에 대 SQL의 토론에 들어갈 싶지 않아요. 또한, 당신의 조언에 대한 당신의 프로젝트에 대해 충분히 알지 못합니다.

  • 이 앱에 적절한 데이터베이스 스키마
  • 구문 분석을
  • 그림을 사용할 수 있는지 확인하기 위해 JSON을 탐험 :하지만 당신은 SQL과 경험을 가지고, 당신이하고 싶은 것 같다 json을 만들고 방금 작성한 데이터베이스에 삽입하십시오.

검색 한 적이 없지만이 http 요청에 의해 제공되는 정보에 대한 coursera의 문서가있을 수 있습니다. 이를 사용하여 모델 개발을 안내 할 수 있습니다.

데이터에 들어가서 경험적으로 모델을 파악하려는 경우 requests.json()이 자동으로 json 콘텐츠를 사전에 디코딩합니다.

각 노드 아래에 무엇의 느낌을 얻기 위해 반복적으로 그렇게 할 방법

>>> r.json().keys() # returns the following line: 
dict_keys(['unis', 'insts', 'cats', 'topics', 'courses']) 

) (당신이 dict.keys을 사용할 수 있습니다,이 DICT을 탐구합니다. 리스트를 히트하면,이 두리스트를 검사하십시오. 목록은 SQL 세계에서 행으로 변환 될 가능성이 높습니다. 목록에 dicts가 있으면 필드 이름의 개념을 알 수 있습니다. 또한,이 목록 내부의 dicts이 중첩 된 dicts 경우, 즉 여기에서

>>> pp.pprint(r.json()['unis'][0]) # which gave me the first record 
{'abbr_name': 'Stanford', 
'banner': 'https://coursera-university-assets.s3.amazonaws.com/73/a47990ea7c11e3b00589d092602f0d/Stanford-University-Banner-LRG.jpg', 
'class_logo': 'https://coursera-university-assets.s3.amazonaws.com/21/9a0294e2bf773901afbfcb5ef47d97/Stanford_Coursera-200x48_RedText_BG.png', 
'description': 'The Leland Stanford Junior University, commonly referred to ' 
       'as Stanford University or Stanford, is an American private ' 
       'research university located in Stanford, California on an ' 
       '8,180-acre (3,310 ha) campus near Palo Alto, California, ' 
       'United States.', 
'display': True, 
'favicon': 'https://coursera-university-assets.s3.amazonaws.com/dc/581cda352d067023dcdcc0d9efd36e/favicon-stanford.ico', 
'home_link': 'http://online.stanford.edu/', 
'id': 1, 
'landing_page_banner': 'https://coursera-university-assets.s3.amazonaws.com/6f/75dd30dd5911e38988193a0e8ad8fe/Stanford_Coursera-200x48_RedText_BG.jpg', 
'location': 'Palo Alto, CA, United States', 
'location_city': 'Palo Alto', 
'location_country': 'US', 
'location_lat': 37.4418834, 
'location_lng': -122.14301949999998, 
'location_state': 'CA', 
'logo': 'https://coursera-university-assets.s3.amazonaws.com/d8/4c69670e0826e42c6cd80b4a02b9a2/stanford.png', 
'name': 'Stanford University', 
'partner_type': 1, 
'primary_color': '#8C1515', 
'rectangular_logo_svg': 'https://coursera-university-assets.s3.amazonaws.com/d6/cb68d0d09b11e3a575e17d6a22968b/SUSig_StnfrdOnly.svg', 
'short_name': 'stanford', 
'square_logo': 'https://coursera-university-assets.s3.amazonaws.com/e3/cebbb0d0a311e39b31794df7e5d956/Coursera-SUSig_StnfrdUStack_SQ.png', 
'square_logo_source': 'https://coursera-university-assets.s3.amazonaws.com/e2/c49eb0d0a311e3ad37254033038522/Coursera-SUSig_StnfrdUStack_SQ.png', 
'square_logo_svg': 'https://coursera-university-assets.s3.amazonaws.com/e0/0dbc10d0a311e3ad37254033038522/Coursera-SUSig_StnfrdUStack_SQ.svg', 
'website': '', 
'website_facebook': '', 
'website_twitter': '', 
'website_youtube': ''} 

, 내가 노력, 그래서

>>> r.json()['unis'].keys() # gives me the following error 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'list' object has no attribute 'keys' 

을 관계

예를 들어

을 나타낼 수, 순진, 나는 것 이 코드 줄에 의해 반환 된 다음 필드가있는 coursera_unis라는 테이블을 만듭니다.

>>> r.json()['unis'][0].keys() 
dict_keys(['website_facebook', 'location', 'website_twitter', 'square_logo', 'favicon', 'id', 'website', 'location_lng', 'logo', 'location_lat', 'partner_type', 'short_name', 'website_youtube', 'square_logo_svg', 'banner', 'primary_color', 'location_country', 'rectangular_logo_svg', 'square_logo_source', 'name', 'landing_page_banner', 'display', 'home_link', 'description', 'abbr_name', 'location_city', 'location_state', 'class_logo']) 

다음 단계는 데이터를 삽입하는 것입니다. It's already answered in this SO thread for MySQL. 유사한 옵션이 다른 db 백엔드에도 존재하므로 너무 어렵지 않습니다.

+0

Haleemur에게 깊은 반응에 감사드립니다. 나는 2 가지 이유 때문에 NoSQL DB를 사용할 생각이었다. 1) 한 개체에 정보가 너무 많아 유용하지 않을 수 있습니다. 따라서 행과 열을 만들어 정보를 저장할 수 있으므로 NoSQL DB를 사용할 생각이었습니다. 2) NoSQL에 대한 경험이 거의 없으며 동일한 방식으로 지식을 파악할 수 있습니다. – PythonEnthusiast

+0

이것에 대한 의견을 듣고 싶습니다. 내 목표는 coursera의 공개 API를 활용하여 목록보기 및 세부보기로 웹 응용 프로그램을 만드는 것입니다. 참조 URL : - https : //www.coursera.org/courses – PythonEnthusiast

+0

퍼시스턴스 레이어를 많이 필요로하지 않을 정도로 간단한 앱처럼 보입니다. 적절한 NoSQL 상점 또는 RDBMS 상점을 선택하면 잘 작동합니다. RDBMS를 설정하는 데 조금 더 많은 작업이 필요할 수 있지만 오후에도 계속 실행됩니다. 당신이 익숙하지 않은 것을 배우기 위해 이것을 사용하고 싶다면, 그걸로 가십시오! –