[급함] API 활용 파이썬 질문

[급함] API 활용 파이썬 질문

QA

[급함] API 활용 파이썬 질문

답변 2

본문

api를 활용해서 이름에 따른 국적을 찾는 코드를 돌려 CSV 파일의 1250개 정도의 리스트 중 1000개를 뽑아내려고 하는데요

'NoneType' object has no attribute 'name'

이런 오류가 나서 혹시 어디에서 문제점이 있는지 알려주실 수 있을까요..?

물어볼 곳이 없어 답답한 마음에 글 적어봅니다.

api는 노출되면 안 되기에 다르게 적어보았습니다. 

도와주시면 감사하겠습니다.

 

(!pip 으로 아래 있는 것들 다 설치한 상태)

import requests

import pycountry

import json

import pandas as pd

import string

import math

 

def get_adress(names):

    apis = list()

    for _ in range(0, len(names), 10):

        name = names[_:_+10]

        api = 'https://api.nationalize.io/?'

        for i, nm in enumerate(name):

            if i == 0:

                api = "".join((api, 'name[]=',nm))

            else:

                api = "".join((api, '&name[]=',nm))

api= "".join((api, "DHJGDHKRHGJ1223"))

        apis.append(api)    

    return apis

def call_api(names):

    r1 = list()

    r2 = list()

    api_list = get_adress(names)    

    for api_ in api_list:

        response = requests.get(api_)

        data = json.loads(response.content)

 

        for datum in data:

            r1.append(datum['name'])

 

            if len(datum['country']) == 0:

                r2.append('error_empty')

            else:

                r2.append(pycountry.countries.get(alpha_2=datum['country'][0]['country_id']).name)

    result = pd.DataFrame({'Name' : r1, 'country':r2})

    return result

def NameParser(FILE_ROOT):

    df = pd.read_csv(FILE_ROOT)

    for i, name_ in enumerate(df['Name']):

        df['Name'][i]=name_.replace(" ", "")

    result = call_api(df['Name'])

    result.to_csv()

 

FILE_ROOT = '/Users/SEGUN/Desktop/Name_unique.csv'

df = pd.read_csv(FILE_ROOT)

#result = call_api(df['Names'])

result = call_api(df['Name'][:10])

result.to_csv()

 

이 질문에 댓글 쓰기 :

답변 2

몇번째 줄에서 저 에러를 밷는지 주시면 좋았겠지만..

name 속성이 없다고 출력된 내용으로보아

r1.append(datum['name'])
r2.append(pycountry.countries.get(alpha_2=datum['country'][0]['country_id']).name)

위 2개 구간이 아닐까 싶은데

data = json.loads(response.content)

이 구간에서 데이터가 어떻게 내려오는지 봐야 알 수 있지 않을까 싶네요..

앗 답변 감사합니다..! 마지막 4줄에서 에러가 나오는 것 같아요.
data = json.loads(response.content) 를 따로 실행시키면 name 'response' is not defined 이렇게 뜨는데 위에 내용과 같이 붙여야 에러 없이 넘어가더라구요.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 209
© SIRSOFT
현재 페이지 제일 처음으로