【发布时间】:2015-10-18 16:08:54
【问题描述】:
我必须创建几个数据集,其中包含几个取自 url 的 json 文件。
我设法以我需要的格式导入了一个:
url = "https://cws01.worldstores.co.uk/api/product.php?product_sku=125T:FT0111"
data = urllib2.urlopen(url).read()
data = json.loads(data)
data = pd.DataFrame(data.items())
data = data.transpose()
data.columns = data.iloc[0]
data = data.drop(data.index[[0]])
因为我有一个很长的 url 列表,所以我需要一个 for 循环,为所有这些重复这段代码。我的尝试是:
for i in urls:
data = urllib2.urlopen(str(i)).read()
data = json.loads(data)
data = pd.DataFrame(data.items())
data = test.transpose()
data.columns = data.iloc[0]
data = data.drop(data.index[[0]])
df.append(data)
其中 urls 是包含地址的字符串列表,即
"https://cws01.worldstores.co.uk/api/product.php?product_sku=125T:FT0111"
而 df 是一个空数据帧,其列与 for 循环中每个 url 生成的数据帧中的列相同
当我运行它时,我不断收到以下错误:
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
当我为单个 url 运行第一段代码时没有出现的错误。 我做错了什么?
编辑:
一个新的尝试是改变for循环如下:
for i in urls:
data = urllib2.urlopen(str(i)).read()
try:
data = json.loads(data)
except:
print(data)
print(i)
exit(-1)
data = pd.DataFrame(data.items())
data = data.transpose()
data.columns = data.iloc[0]
data = data.drop(data.index[[0]])
df.append(data)
现在我得到错误:
data = pd.DataFrame(data.items())
AttributeError: 'str' object has no attribute 'items'
【问题讨论】:
-
data = json.loads(data)线路似乎已经离开... -
你是绝对正确的。我添加了,但我不断收到错误消息。我将编辑问题
-
您的新错误表明其中一个 URL 未返回有效的 JSON。我假设您在第一个 sn-p 中没有一个一个地尝试它们。用
try/except包围json.loads并打印有问题的i和/或data以验证您得到了什么。 -
我对python比较陌生,你能告诉我正确的语法吗?非常感谢
-
由于缩进语法,Python 很难在 cmets 中编写,但是...用换行符替换
<CR>和用空格替换#...try:<CR>####data = json.loads(data)<CR>except:<CR>####print(data)<CR>####print(i)<CR>#### exit(-1)<CR>...
标签: python json for-loop pandas