Olá, bom dia!
Tudo bom?
Estou tendo problemas ao importar as bases de dados em formato JSON. Estou utilizando o vscode com a extensão do jupyter notebook instalada, já fiz alguns cursos da Alura na escola de DataScience e é a primeira vez que acontece tal erro.
Faço a declaração da variável da URL dos dados de hospedagem:
url_dados_hospedagem = 'https://cdn3.gnarususercontent.com.br/2928-transformacao-manipulacao-dados/dados_hospedagem.json'
em seguida, faço a leitura da url:
dados_hospedagem = pd.read_json(url_dados_hospedagem)
Porém, tive esse erro como retorno:
**---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
Cell In[31], line 1
----> 1 dados_hospedagem = pd.read_json(url_dados_hospedagem)
**File c:\ProgramData\anaconda3\Lib\site-packages\pandas\io\json\_json.py:780, in read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, precise_float, date_unit, encoding, encoding_errors, lines, chunksize, compression, nrows, storage_options, dtype_backend, engine)
777 if convert_axes is None and orient != "table":
778 convert_axes = True
--> 780 json_reader = JsonReader(
781 path_or_buf,
782 orient=orient,
783 typ=typ,
784 dtype=dtype,
785 convert_axes=convert_axes,
786 convert_dates=convert_dates,
787 keep_default_dates=keep_default_dates,
788 precise_float=precise_float,
789 date_unit=date_unit,
790 encoding=encoding,
791 lines=lines,
792 chunksize=chunksize,
793 compression=compression,
794 nrows=nrows,
795 storage_options=storage_options,
796 encoding_errors=encoding_errors,
...
File c:\ProgramData\anaconda3\Lib\urllib\request.py:643, in HTTPDefaultErrorHandler.http_error_default(self, req, fp, code, msg, hdrs)
642 def http_error_default(self, req, fp, code, msg, hdrs):
--> 643 raise HTTPError(req.full_url, code, msg, hdrs, fp)
**HTTPError: HTTP Error 403: Forbidden
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings**...**
Fui atrás e vi que é um erro de request até que relativamente simples de resolver. Resolvi com o seguinte código utilizando a biblioteca requests:
def carregar_json(url):
response = requests.get(url)
response.raise_for_status() # Levanta um erro HTTP se a requisição falhar
return response.json()
# Carregar os dados
dados_hospedagem_json = carregar_json(url_dados_hospedagem)
# Converter para DataFrame
dados_hospedagem = pd.DataFrame(dados_hospedagem_json)
Deu certo, porém, todas as URLs que estou lendo em formato JSON, preciso fazer todo esse processo novamente da declaração e usar a função a partir da biblioteca importada. Tanto nas duas bases de dados do início do curso, como nos dois primeiros desafios.
Como isso nunca ocorreu em outros cursos, gostaria de saber se tem como resolver isso para ler diretamente com a biblioteca pandas. Vocês poderiam me auxiliar, por favor?!
Obs.: Estou utilizando o kernel conda (Python 3.11.7)