Python 将json从url拉入数据帧错误

Python 将json从url拉入数据帧错误,python,pandas,web-scraping,Python,Pandas,Web Scraping,看这里,我似乎可以指向一个包含文件的url,以便将其拉入数据帧: import pandas as pd url = 'https://www.ishares.com/us/products/239705/ishares-phlx-semiconductor-etf/1467271812596.ajax?fileType=csv' df = pd.read_csv(url, skiprows=10) print(df.head()) 我尝试对json类型的文件执行相同的操作: impo

看这里,我似乎可以指向一个包含文件的url,以便将其拉入数据帧:

import pandas as pd
url = 'https://www.ishares.com/us/products/239705/ishares-phlx-semiconductor-etf/1467271812596.ajax?fileType=csv'
df = pd.read_csv(url, skiprows=10)    
print(df.head())
我尝试对json类型的文件执行相同的操作:

import pandas as pd
url = 'https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json'
df = pd.read_json(url)
print(df.head()
但是,它抛出了一个
ValueError:Expected object或value
。我尝试添加
lines=True
和其他变体,但没有成功。 如何将此json作为数据帧提取


您可以通过转到并单击“下载”(这将生成一个.xls)或在浏览器中键入来查看它的实际外观。我不选择
fileType=csv
xls
的原因是
csv
返回大量JS代码的意外输出,
xls
返回HTTP 500错误。

我不确定错误的原因,但这里有一个使用请求库的解决方法:

import requests
from json import loads
import pandas as pd

url = 'https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json'
json_dict = loads(requests.get(url).content)

#parse headers
headers=[]
for header in json_dict['columns']:
    headers.append(header['name'])

df = pd.DataFrame(json_dict['data'], columns=headers)

希望这能有所帮助。

我不确定错误的原因,但这里有一个使用请求库的解决方法:

import requests
from json import loads
import pandas as pd

url = 'https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json'
json_dict = loads(requests.get(url).content)

#parse headers
headers=[]
for header in json_dict['columns']:
    headers.append(header['name'])

df = pd.DataFrame(json_dict['data'], columns=headers)

希望这有帮助。

响应是有效的json吗?@DanielMesejo将此粘贴到浏览器中,将文件下载到您的计算机
https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json
您需要一个在浏览器中生成json的链接。这只是下载文件的链接。我不相信它会将json返回到python,而只是一个状态代码200@Jaba您是否看到下载此文件的不同方式(以任何格式)因此,我可以将数据加载到dataframe?我的简单猜测/解决方法是允许它下载,然后从
Downloads
directory打开文件。响应是否为有效的json?@DanielMesejo将此粘贴到浏览器中,将文件下载到您的计算机
https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json
您需要一个在浏览器中生成json的链接。这只是下载文件的链接。我不相信它会将json返回到python,而只是一个状态代码200@Jaba您是否看到了下载此文件(以任何格式)的不同方式,以便我可以将数据加载到dataframe?我的简单猜测/解决方法是允许它下载,然后从
下载
目录打开该文件。您是否尝试运行此操作?我得到一个ValueError:没有JSON对象可以被不可预知地解码这正是我试图解决的问题。请看这个链接,它从字面上下载了JSON文件,它不会返回JSON,很可能是一个状态码200,表示请求已发出。我再次运行了它,它对我来说运行良好。我使用的是requests 2.21.0和json 2.0.9。您试过运行这个吗?我得到一个ValueError:没有JSON对象可以被不可预知地解码这正是我试图解决的问题。请看这个链接,它从字面上下载了JSON文件,它不会返回JSON,很可能是一个状态码200,表示请求已发出。我再次运行了它,它对我来说运行良好。我使用的是请求2.21.0和json 2.0.9