데이터를 확인해보면 일부 데이터는 LinkedRecords 가 없기 때문에 발생합니다.
예) 제일 앞의 데이터
{
"SourceName":"EU Food Improvement Agents",
"SourceID":"E 322 LECITHINS",
"Name":"LECITHINS",
"Description":"Commission Regulation (EU) No 231/2012 of 9 March 2012 laying down specifications for food additives listed in Annexes II and III to Regulation (EC) No 1333/2008 of the European Parliament and of the Council Text with EEA relevance",
"URL":"https://eur-lex.europa.eu/legal-content/EN/ALL/?uri=CELEX%3A32012R0231",
"Data":[
{
"TOCHeading":{
"type":"Compound",
"#TOCHeading":"Acid Value"
},
"Value":{
"StringWithMarkup":[
{
"String":"Lecithins: not more than 35 mg of potassium hydroxide per gram; Hydrolysed lecithins: not more than 45 mg of potassium hydroxide per gram"
}
]
}
}
]
}따라서 없는 경우에는 출력을 건너띄도록 수정하시면 됩니다.
dictionary 안에 해당하는 Key 가 있는지 확인 하는 방법에는 if 조건문이나 try-except를 사용할 수 있습니다.
또한 LinkedRecords 아래에 바로 CID가 존재하기에
data["LinkedRecords"][0]["CID"] 가 아닌 data["LinkedRecords"]["CID"] 으로 CID를 접근해야 합니다.
"LinkedRecords":{
"CID":[
443314
]
}아래는 if "key" in dictionary: 를 사용한 예시입니다.
또한 CID의 경우 리스트라서 [0]을 제거했습니다.
만약 첫 CID 만 필요한 경우에는 원래대로 [0]을 넣으면 됩니다.
import requests
import json
host = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug_view'
path = '/annotations/heading/json?heading=Acid%20Value'
url = host + path
a = requests.get(url)
b = a.json()
# print(b["Annotations"]["Annotation"])
for data in b["Annotations"]["Annotation"]:
if "LinkedRecords" in data:
print(data["LinkedRecords"]["CID"])