我有一个嵌套的JSON(API)Webstie,我想解析该项目并将项目保存到文件中(使用Scrapy框架)。
我要访问给定元素的每个子元素,这些元素的格式如下
0 {…}
1 {…}
2 {…}
3 {…}
4 {…}
5 {…}
6 {…}
7 {…}
8 {…}
9 {…}
10 {…}
如果我将元素0展开,则会得到以下值,其中{...}会进一步扩展
id 6738
date "2018-06-14T09:38:51"
date_gmt "2018-06-14T09:38:51"
guid
rendered "https:example.com"
modified "2019-03-19T20:43:50"
modified_gmt "2019-03-19T20:43:50"
How does it look like in reality
我要如何连续访问每个元素,首先是0,然后是1,然后是2 ... ...总计为350,并获取值,例如
guid
rendered "https//:example.com"
并将其保存到项目。
我所拥有的:
results = json.loads(response.body_as_unicode())
item = DataItem()
for var in results:
item['guid'] = results["guid"]
yield item
此操作失败
TypeError: list indices must be integers, not str
我知道我可以使用
进行访问 item['guid'] = results[0]["guid"]
但是,这只给了我整个列表的[0]索引,我想遍历所有索引。如何在列表中传递索引号?
答案 0 :(得分:1)
将results["guid"]
的for循环替换为var["guid"]
:
for var in results:
item['guid'] = var["guid"]
# do whatever you want with item['guid'] here
当您可以像guid
一样访问results[0]["guid"]
时,这意味着您具有字典列表,每个字典都包含名为guid
的键。在for循环中,您使用results
(即列表)而不是抛出var
的{{1}}(即每次迭代中包含每个字典的TypeError
),因为列表索引必须是整数而不是字符串(例如{ {1}})。
更新:如果要保存每个"guid"
,可以将其保存在这样的字典中:
var["guid"]
现在guid_holder = {"guid": []}
for var in results:
guid_golder["guid].append(var["guid"])
for guid in guid_holder["guid"]:
print(guid)
拥有所有元素。