爬虫开发(2)——序列化

为什么要使用序列化?

我们定义了一个字典:

aDict = dict(url = 'lu & yi.html', content = 'They will be ...')

这里我们把网页 lu & yi.html 作为起始的网页地址,在之后的爬取过程中,将使用新的网页url来替换它。但是当我们关闭工程,重新启动之后,该字典又重新初始化起始网页为lu & yi.html。

我们希望这个字典可以存储起来,而不是不断地被定义、初始化、回收。

什么是序列化?

序列化:把变量从内存中变成可存储或可传输的过程(在Python中叫pickling)。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

如何序列化对象?

  1. json序列化变量

序列化对象至本地文件:json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
对应的反序列化方法:json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
序列化对象至字符串:json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
对应的反序列化方法:json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

  1. numpy序列化ndarray
    序列化array:np.save(file, arr, allow_pickle=True, fix_imports=True)
    序列化并压缩:np.savez(file, *args, **kwds)
    反序列化array:numpy.load(file, mmap_mode=None, allow_pickle=True, fix_imports=True, encoding=’ASCII’)

  2. pickle序列化变量
    pickle和json一样也是python内置的序列化模块。与json相比,pickle的序列化结果虽然不可读,但其可以直接序列化自定义的对象,甚至连递归存储变量、引用变量都可以序列化,不必再像json一样设计自定义的jsonEncoder,带来了极大便利。
    序列化对象至本地:pickle.dump(obj, file, protocol=None, *, fix_imports=True)
    对应的反序列化方法:pickle.load(file, *, fix_imports=True, encoding=”ASCII”, errors=”strict”)
    *也可以使用dumps,loads将对象序列化为一个字符串

示例

try:
    import cPickle as pickle
except ImportError:
    import pickle

import json

aDict = dict(url = 'lu & yi.html', content = 'They will be ...')
picklingDat = pickle.dumps(aDict)
print(picklingDat)
print(pickle.loads(picklingDat))

print()

jsonDat = json.dumps(aDict)
print(jsonDat)
print(json.loads(jsonDat))

结果:

b'\x80\x03}q\x00(X\x03\x00\x00\x00urlq\x01X\x0c\x00\x00\x00lu & yi.htmlq\x02X\x07\x00\x00\x00contentq\x03X\x10\x00\x00\x00They will be ...q\x04u.'
{'url': 'lu & yi.html', 'content': 'They will be ...'}

{"url": "lu & yi.html", "content": "They will be ..."}
{'url': 'lu & yi.html', 'content': 'They will be ...'}

[1]https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577998e407bb309542d9b6a68d9276bc3dbe000
[2]https://blog.csdn.net/brink_compiling/article/details/74781782

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值