Python爬虫踩坑之json报错,json包比较

跑爬虫总在json.loads()的时候报错:

json.decoder.JSONDecodeError: Invalid \escape: line 1 column 3190 (char 3189)

本来以为是loads(res.text)传的空值,打印下确实有值。翻译了一下大概就是说在Python对象传入的时候字典的键少引号。
解决方案:demjson会补全引号

今天主要对比三个包,json,simplejson,demjson:

simplejson

和json用法差不多有dump,dumps,load,loads。用法的话百度json相应的用法

demjson

encode()将Python对象成json    
decode(text,encoding)解码成Python对象
encode_to_file(filename, obj, encoding='utf-8', overwrite=False, **kwargs)将Python对象编码为JSON并写入给定文件中
decode_file(filename, encoding=None, **kwargs)#对给定文件中的JSON进行解码

对比速度:###先感谢大神:json包比较

demjson:

from time import clock

obj = [u"ero", [[u"erode", u"腐蚀;侵蚀;磨损", u"0", u""], [u"erodent", u"侵蚀的, 腐蚀药", u"1", u""],
                [u"erogenous", u"唤起情欲的;性感的", u"2", u""], [u"eros", u"【希神】爱神, (eros)性爱", u"3", u""],
                [u"erose", u"凹凸不平的, 【植】(叶等)有啮蚀状边缘的", u"4", u""], [u"erosion", u"侵蚀;腐蚀", u"5", u""],
                [u"erosive", u"腐蚀(性)的;浸蚀(性)的", u"6", u""], [u"erotism", u"性爱倾向;性的兴奋", u"7", u""],
                [u"erotogenic", u"唤起情欲的, 性感带的", u"8", u""], [u"erotomania", u"色情狂", u"9", u""]]]

t = clock()

import demjson
t2 = clock()
json_data = demjson.encode(obj)
t3 = clock()
obj2 = demjson.decode(json_data)
t4 = clock()

print(obj == obj2)
print(t2 - t)
print(t3 - t2)
print(t4- t3)
True
0.03165778193514972
0.0489727486156376
0.061174100642049804

simplejson:

t = clock()

import simplejson
t2 = clock()
json_data = simplejson.dumps(obj)
t3 = clock()
obj2 = simplejson.loads(json_data)
t4 = clock()

print(obj == obj2)
print(t2)
print(t3)
print(t4)
True
0.008941219257814766
0.008994640858255158
0.00904275567719485

json

t = clock()

import json
t2 = clock()
json_data = json.dumps(obj)
t3 = clock()
obj2 = json.loads(json_data)
t4 = clock()

print(obj == obj2)
print(t2)
print(t3)
print(t4)

True
0.009327199165632434
0.009362223923537062
0.009408569815309853

simplejson时间最短,json略次,demjson最慢。只是说了demjson有补全功能

你可能感兴趣的:(笔记)