【问题标题】:How to convert raw json from a url to json or csv?如何将原始 json 从 url 转换为 json 或 csv?
【发布时间】:2019-06-20 17:07:28
【问题描述】:

我有一个 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 格式。

【问题讨论】:

    标签: json python-3.x csv beautifulsoup urllib3


    【解决方案1】:

    首先,您的代码大部分是正确的:

    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 的代码

    【讨论】:

    • 谢谢塞巴斯蒂安。问题仍然是第一行被视为文件的一部分。我试图摆脱: { "response":{"numFound":1161,"start":0,"docs":[ ...以及最后的“}”。
    • 您想将每个文档保存为 csv 文件中的一行吗?
    • 是的,其中每一列是上述属性之一,每一行是不同的专利文件
    • 你需要numFound属性吗?
    • 不,只是结果本身
    【解决方案2】:

    您似乎弄错了如何使用 json.load 加载 JSON。一个简单的修复如下所示。

    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]))
    

    【讨论】:

    • 你可以通过遍历json_data['response']['docs']来获取单个文档
    • @Vaibhav Bajaj 谢谢。你能解释一下“response.code == 200”是什么意思吗?
    • @TomNash 谢谢。您的意思是为了将其转换为 CSV 进行迭代吗?
    • @alkhalifas response.code == 200 检查您的 HTTP 请求是否成功。 200 是成功的代码,就像 404 是页面未找到。
    猜你喜欢
    • 2022-08-03
    • 2018-01-22
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多