折腾Python人人爬虫的收获

晚上折腾Python写人人网爬虫,目标是所有好友的相册和个人资料以及通讯录信息,目前相册抓取借助网上一位TX发现的人人相册的小Bugs已经实现,晚上对两个以前不喜欢用的功能颇有所得,在这里暂且记录一下。

首先是Python内置的数据库引擎Shelve,Python的数据持久化操作主要有六类:普通文件、DBM文件、Pickled对象存储、shelve对象存储、对象数据库存储、关系数据库存储。咱们初学者比较喜欢用普通文本文件和第三方的关系型数据库来进行数据持久化操作,但是在一些诸如要求"断点工作"的情况下用普通文件存储数据显得有些不够用而调用第三方数据库就显得杀鸡用牛刀,所以这个时候就轮到Shelve闪亮登场了:

这是一个简单例子实现依靠Shelve完成断点工作功能

    
    import shelve
    db = shelve.open(LastUpdated, writeback = True)
    if not db.has_key('WorkList'): db['WorkList'] = []
    if len(db['WorkList']) == 0:
      db['WorkList'] = [id for id, work in allworkList]     
    updateList = db['TaskList']

Shelve使用起来非常简单

    
    import shelve
    shelve = shelve.open("filename-on-disk") #打开shelve文件
    MySpecialVariable = shelve['keyname'] #从shelve中读取
    shelve['keyname'] = MySpecialVariable #给shelve赋值
    shelve.close() #关闭对象

当在发生意外情况时(如进程被杀死或意外终止等),如果需要对Shelve进行持久化写入,需要使用sync()


    import shelve
    shelve = shelve.open("filename-on-disk", writeback = True) #或shelve=shelve.open(filename-on-disk, 'c')   
    shelve.sync()

在Windows中shelve的文件路径如果有中文,必须是utf-8编码的str对象才行,gbk的str和unicode对象都会有问题,并且且key与value必须是字符串.


另外一个Set()类型:Set是简单对象的无需集合。在set中,没有重复元素。通常在对集合中元素的顺序和出现的次数没有什么要求时使用。对于set,有一些函数可以帮助求解set之间的关系,例如:包含关系,交集关系等。

定义一个set:s = set([1,2,3,4])。使用set函数来定义一个set。

set中没有重复元素,如果定义set时其中包含重复元素,那该元素也仅会出现一次。

可以使用in关键字来判定某个对象是否属于一个set:

    s = set([1,2,3])
    print(1 in s)
    #False 

可以使用&、|、-求两个set的交集、并集、差集:

    >>> s1 = set([1,2,3,4])
    >>> s2 = set([2,4])
    >>> print(s1 & s2)
    set([2, 4])
    >>> print(s1 | s2)
    set([1, 2, 3, 4])
    >>> print(s1 - s2)
    set([1, 3])
    >>> 

关于更多set的使用方法,使用help(set)。


「倘若有所帮助,不妨酌情赞赏!」

Holmesian

感谢您的支持!

使用微信扫描二维码完成支付


相关文章

发表新评论