使用python处理从semrush到JSON的CSV响应

时间:2017-11-09 13:14:49

标签: python json python-2.7 csv dictionary

我正在使用semrush来获取网站分析的响应。我收到的是CSV类数据,在查看文档后,我无法得到我可以从SEMRUSH获得json响应的因素

以下是代码和相应的回复:

>>> data = requests.get('http://api.semrush.com/?key=KEY&type=domain_ranks&domain=example.com')
>>> data.text
u'Date;Database;Domain;Rank;Organic Keywords;Organic Traffic;Organic Cost;Adwords Keywords;Adwords Traffic;Adwords Cost;PLA keywords;PLA uniques\r\n20171108;ae;exmaple.com;34;3013;690144;700580;0;0;0;0;0\r\n20171108;af;example.com;88;663;17056;2868;0;0;0;0;0\r\n

我希望像这样在json中得到回应:

{
'Date':'20171108',
'Domain':'example.com',
'Database': ['ae','af']
'ae':[
'Organic Keywords': 34,
'Organic Traffic': 3013
'Organic Cost':690144,
'Adwords Keywords':700580,
'Adwords Traffic':0,
'Adwords Cost':0,
'PLA keywords':0,
'PLA uniques':0


],
'af':[
'Rank':
'Organic Keywords':88,
'Organic Traffic':663,
'Organic Cost':17056,
'Adwords Keywords':
'Adwords Traffic':0,
'Adwords Cost':0,
'PLA keywords':0,
'PLA uniques':0


]
}

请告诉我如何改进以获得上述结果。

1 个答案:

答案 0 :(得分:1)

尝试使用以下代码行来实现:

d1 = dict(zip(data.text.splitlines()[0].split(';'),data.text.splitlines()[1].split(';')))
d1['Database'] = [d1['Database'],text.splitlines()[2].split(';')[1]]
d1[d1['Database'][0]] = dict(list(d1.items())[3:])
d2 = dict(zip(text.splitlines()[0].split(';'),text.splitlines()[2].split(';')))
d1[d1['Database'][1]] = dict(list(d2.items())[3:])
for i in list(d1.keys())[3:-2]:
    d1.pop(i)
print(d1)

现在输出将是:

{'Date': '20171108', 'Database': ['ae', 'af'], 'Domain': 'exmaple.com', 'ae': {'Rank': '34', 'Organic Keywords': '3013', 'Organic Traffic': '690144', 'Organic Cost': '700580', 'Adwords Keywords': '0', 'Adwords Traffic': '0', 'Adwords Cost': '0', 'PLA keywords': '0', 'PLA uniques': '0'}, 'af': {'Rank': '88', 'Organic Keywords': '663', 'Organic Traffic': '17056', 'Organic Cost': '2868', 'Adwords Keywords': '0', 'Adwords Traffic': '0', 'Adwords Cost': '0', 'PLA keywords': '0', 'PLA uniques': '0'}}

打印效果更好:-)

pprint(d1)

将导致:

{'Database': ['ae', 'af'],
 'Date': '20171108',
 'Domain': 'exmaple.com',
 'ae': {'Adwords Cost': '0',
        'Adwords Keywords': '0',
        'Adwords Traffic': '0',
        'Organic Cost': '700580',
        'Organic Keywords': '3013',
        'Organic Traffic': '690144',
        'PLA keywords': '0',
        'PLA uniques': '0',
        'Rank': '34'},
 'af': {'Adwords Cost': '0',
        'Adwords Keywords': '0',
        'Adwords Traffic': '0',
        'Organic Cost': '2868',
        'Organic Keywords': '663',
        'Organic Traffic': '17056',
        'PLA keywords': '0',
        'PLA uniques': '0',
        'Rank': '88'}}

希望这会有所帮助。