前言
小白在学爬虫的时候,在百度翻译爬了一段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文件