Как конвертировать сырой JSON из URL-адреса в JSON или CSV? - PullRequest
1 голос
/ 20 июня 2019

У меня есть URL, который предоставляет мне необработанные данные на основе json, и у меня возникают проблемы с импортом этого необработанного текста в виде файла json или даже с преобразованием его в csv.

Я пыталсяс помощью urllib3 и BeautifulSoup импортируйте эти данные и сохраните их как объект-суппорт.Что я не могу сделать, так это хранить эти данные как json и csv (мне нужны оба).

Одна из проблем, которые, по моему мнению, вызывают эту проблему, заключается в наличии строки в верхней части страницы, описывающейвозвращенные результаты, но технически не являются частью данных json:

Код вверху, который может вызывать проблему:

{
"response":{"numFound":1161,"start":0,"docs":[
  {
    "applicationType":"UTILITY",
    "documentId":"US10010749B2",
    "applicationNumber":"US14422067", 

Библиотеки, которые я использую:

import urllib3
from bs4 import BeautifulSoup
import json

Некоторый код:

url = "https://developer.uspto.gov/ibd-api/v1/patent/application?assignee=alexander&start=0&rows=5"
http = urllib3.PoolManager()
response = http.request('GET', url)
soup = BeautifulSoup(response.data, "html.parser")

print(soup)

json_data = json.load(url)
print(json_data)

AttributeError: 'str' object has no attribute 'read'

Моя конечная цель состоит в том, чтобы иметь возможность "организовать и загрузить" все данные из URL-адреса и сохранять их в форматах json и csv.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Во-первых, ваш код в основном правильный:

import urllib3
from bs4 import BeautifulSoup
import json
import pandas as pd

url = "https://developer.uspto.gov/ibd-api/v1/patent/application?assignee=alexander&start=0&rows=5"
http = urllib3.PoolManager()
response = http.request('GET', url)
soup = BeautifulSoup(response.data, "html.parser")

json_data = json.loads(soup.text)
print(json_data)

Имея правильные данные json, вы можете импортировать их в кадр данных panda и затем экспортировать в csv:

df = pd.DataFrame(json_data['response']['docs'])
df.to_csv('my_csv.csv', index=False)

РЕДАКТИРОВАТЬ

Добавлен код для экспорта в CSV

1 голос
/ 20 июня 2019

Вы, кажется, ошиблись, как загрузить JSON, используя json.load.Простое исправление показано ниже.

if response.code == 200:
     json_data = json.load(response.data)
     print(json_data)

Возвращает данные в формате словаря.Затем вы можете преобразовать его в файл CSV.Вот пример кода для этого:

with open('test.csv', 'w') as f:
for key in json_data.keys():
    f.write("%s,%s\n"%(key, json_data[key]))
...