json格式转csv文件


前言

小白在学爬虫的时候,在百度翻译爬了一段json格式的字段,然后想要将其转成csv格式
奈何这个格式对小白来说太不友好,故发出来让大佬看看怎么写最好

json代码

代码如下:

{'errno': 0, 'data': [{'k': 'orange', 'v': 'n. 橙子; 柑橘; 橙汁; 橘汁饮料; 橙红色; 橘黄色; adj. 橙红色的; 橘黄色的; 奥兰'},/
 {'k': 'oranges', 'v': 'n. 橙子; 柑橘; 橙汁; 橘汁饮料; 橙红色; 橘黄色;  orange的复数;'}, /
 {'k': 'orange juice', 'v': ' 橙(橘)汁; 缩写词为o.j.;'}, {'k': 'Orange Juice', 'v': '网络 鲜榨橙汁; 橙子; 鲜橙多; 橙汁;'},/
  {'k': 'orangeade', 'v': 'n. 橙汁饮料; 橘子汁; 橙汁汽水; 一杯橙汁汽水;'}]}

最后写出来的代码

代码如下:

from urllib.request import urlopen,Request
from urllib.parse import urlencode
import json
import csv

url = 'https://fanyi.baidu.com/sug'        #请求的api接口
data = {

}
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
    'cookie':'BIDUPSID=A99B4CF715AD2AD4139D6BD1643F4D70; PSTM=1602400451; BAIDUID=A99B4CF715AD2AD47F73751113EF365C:FG=1; delPer=0; PSINO=3; H_PS_PSSID=32754_32617_1425_7566_32795_32706_32230_7517_32781_32115_26350; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1602400467,1602400508; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1602400508; __yjsv5_shitong=1.0_7_dd47a528be1adaef2d454f69983fc5d34edf_300_1602400511209_101.68.71.13_a54b7624; yjs_js_security_passport=75d9f20a4d3ebb6abb12faadd399e9ed1bb50904_1602400532_js',
    'x-requested-with': 'XMLHttpRequest'#请求类型
}
def fanyi(kw):
    data = {
        'kw':kw
    }
    #request()中的data参数是bytes 类型
    req = Request(url,
                  data=urlencode(data).encode('utf-8'))
    resp = urlopen(req)
    assert resp.code==200
    json_data = resp.read()#byte
    content_encode = resp.getheader('Content-Type')
    json.loads(json_data.decode('utf-8'))
    json2csv(json_data,'fanyi.csv')
def json2csv(data,filename):
    new_list = []
    with open(filename,'w',encoding='utf-8')as f:
        item_list=json.loads(data.decode('utf-8')) #反序列化
        item_list.pop('errno')	#先删除第一个没用的键值对
        num=len(item_list['data']) #计算item_list里面的列表长度
        i=0
        while i<num:
            new_list.append(item_list['data'][i]) #这里的目的是把item_list里面key‘data’去掉
            print(item_list['data'][i])
            i=i+1
        print(new_list)
        w = csv.writer(f)
        filenames=new_list[0].keys() #取出key作为csv文件的表头
        for row in new_list:
            w.writerow(filenames)
            w.writerow(row.values())

该处使用的url网络请求的数据。


总结

如果直接在json格式中进行values遍历的话会报错超出范围,在试了多种方法之后都不行,到最后发现这个方法可行,迫不及待的发出来分享给大家,文末大佬们有没有什么更好的办法,小白实在是想不出来其他办法了。还请多多指教@json格式转csv文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值