发明内容
本发明提供了一种数据库更新方法及装置,能够提高数据库的更新效率。
本实施例提供了一种数据库更新方法,所述方法包括:
获取一分类网址后,获取所述分类网址对应的对象标识;
查询所述第一缓存中是否存在所述分类网址对应的对象标识,所述第一缓存用于存储数据库中的对象标识;
获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。
优选地,所述方法还包括:
获取存在于所述第一缓存中的所述分类网址对应的对象标识;
抓取所述对象标识对应的对象属性,并判断所述对象属性与所述第二缓存中所述对象标识对应的对象属性是否相同,所述第二缓存用于存储所述数据库中的对象信息,所述对象信息包括对象标识和与所述对象标识对应的对象属性;
当抓取的所述对象属性与所述第二缓存中所述对象标识对应的对象属性不同时,根据抓取的所述对象属性更新所述数据库。
优选地,所述方法还包括:
将所述未存在于所述第一缓存中的所述分类网址对应的对象标识添加到所述第一缓存。
优选地,所述获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库,包括:
获取未存在于所述第一缓存中的所述分类网址对应的对象标识;
抓取所述对象标识对应的对象属性,并将所述对象标识与所述对象属性添加到所述数据库。
优选地,所述抓取所述对象标识对应的对象属性,并将所述对象标识与所述对象属性添加到所述数据库之后,还包括:
利用抓取的对象属性更新所述第二缓存。
优选地,所述获取一分类网址后,获取所述分类网址对应的对象标识,包括:
获取一分类网址,以及所述分类网址对应的总页数;
获取所述分类网址对应的各个页的页标识;
获取各个页标识对应的对象标识。
优选地,所述方法还包括:
获取所述第一缓存中与所述分类网址对应的对象标识不同的对象标识;
抓取所述对象标识对应的对象属性,并更新所述数据库。
本实施例还提供了一种数据库更新装置,所述装置包括:
第一获取模块,用于获取一分类网址后,获取所述分类网址对应的对象标识;
第一查询模块,用于查询所述第一缓存中是否存在所述分类网址对应的对象标识,所述第一缓存用于存储数据库中的对象标识;
第一更新模块,用于获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。
优选地,所述装置还包括:
第二获取模块,用于获取存在于所述第一缓存中的所述分类网址对应的对象标识;
第一判断模块,用于抓取所述对象标识对应的对象属性,并判断所述对象属性与所述第二缓存中所述对象标识对应的对象属性是否相同;
第二更新模块,用于当抓取的所述对象属性与所述第二缓存中所述对象标识对应的对象属性不同时,根据抓取的所述对象属性更新所述数据库。
优选地,所述装置还包括:
第一添加模块,用于将所述未存在于所述第一缓存中的所述分类网址对应的对象标识添加到所述第一缓存。
优选地,所述第一更新模块,包括:
第一获取子模块,用于获取未存在于所述第一缓存中的所述分类网址对应的对象标识;
第一添加子模块,用于抓取所述对象标识对应的对象属性,并将所述对象标识与所述对象属性添加到所述数据库。
优选地,所述装置还包括:
第三更新模块,用于利用抓取的对象属性更新所述第二缓存。
优选地,所述第一获取模块,包括:
第二获取子模块,用于获取一分类网址,以及所述分类网址对应的总页数;
第三获取子模块,用于获取所述分类网址对应的各个页的页标识;
第四获取子模块,用于获取各个页标识对应的对象标识。
优选地,所述装置还包括:
第三获取模块,用于获取所述第一缓存中与所述分类网址对应的对象标识不同的对象标识;
第四更新模块,用于抓取所述对象标识对应的对象属性,并更新所述数据库。
本发明预先建立第一缓存,用于存储数据库中的对象标识,当获取分类网址对应的对象标识后,查询所述第一缓存中是否存在所述对象标识,最后获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。由于访问缓存的效率比访问数据库的效率高,所以本实施例中利用第一缓存存储数据库中的对象标识,通过判断第一缓存中是否存在分类网址对应的对象标识,确定数据库是否需要更新。与现有技术比,本实施例能够在减少访问数据库次数的基础上,实现数据库的更新,并提高了数据库的更新效率。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例一
参考图1,图1为本实施例提供的数据库更新方法流程图,所述方法包括:
S101:获取一分类网址后,获取所述分类网址对应的对象标识。
实际操作中,分类数据库中存储若干分类网址,本实施例获取一个分类网址后,可以利用爬虫工具抓取所述分类网址对应的对象标识。
实际应用中,由于一个分类网址通常对应若干页的对象,所以,本实施例在获取一个分类网址后,可以首先获取所述分类网址对应的总页数,其次,通过遍历所述分类网址对应的各个页的对象得到各个页的页标识,如各个页的网址信息等。最后,可以利用爬虫工具抓取各个页标识对应的对象标识。
S102:查询所述第一缓存中是否存在所述分类网址对应的对象标识,所述第一缓存用于存储数据库中的对象标识。
本实施例中,预先建立第一缓存,并将数据库中的对象标识存入所述第一缓存。具体的,数据库中存储了对象标识和与所述对象标识对应的对象属性,为了在更新数据库时减少访问数据库的次数,本实施例预先建立一个缓存,所述缓存用于存储数据库中存储的所有对象标识,其中,所述对象标识可以为对象的网址信息等。
S103:获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。
本实施例中,在获取所述分类网址对应的对象标识后,查询预先建立的第一缓存中是否存在所述对象标识。如果不存在,说明数据库中也不存在所述对象标识,所以,将所述对象标识更新至所述数据库中。
具体的,首先获取未存在于所述第一缓存中的所述分类网址对应的对象标识,其次,利用爬虫工具分布式抓取该对象标识对应的对象属性,并将所述对象标识与所述对象属性添加到所述数据库,实现所述数据库的更新。
参考图2,图2为本实施例提供的数据库更新方法流程图,所述方法包括:
S201:预先建立第一缓存,并将数据库中的对象标识存入所述第一缓存。
S202:预先建立第二缓存,并将所述数据库中的对象信息存入所述第二缓存,所述对象信息包括对象标识和与所述对象标识对应的对象属性。
本实施例中,预先建立两个缓存,分别为第一缓存和第二缓存,第一缓存用于存储数据库中的对象标识,第二缓存用于存储数据库中的对象信息,所述对象信息包括对象标识和与所述对象标识对应的对象属性,其中,对象标识可以为商品的网址信息,对象属性可以为商品的价格和库存等。
S203:获取一分类网址后,获取所述分类网址对应的对象标识。
S204:查询所述第一缓存中是否存在所述分类网址对应的对象标识,如果是,则进入S205,否则进入S208。
本实施例中,当获取一个分类网址对应的对象标识后,在预先建立的第一缓存中查询是否存在所述对象标识,如果存在,则执行S205,否则执行S208。
S205:获取存在于所述第一缓存中的所述分类网址对应的对象标识。
S206:抓取所述对象标识对应的对象属性,并判断所述对象属性与所述第二缓存中所述对象标识对应的对象属性是否相同,如果不相同,则进入S207。
S207:当抓取的所述对象属性与所述第二缓存中所述对象标识对应的对象属性不同时,根据抓取的所述对象属性更新所述数据库。
实际应用中,当第一缓存中存在所述分类网址对应的对象标识时,首先获取存在于所述第一缓存中的所述分类网址对应的对象标识,其次,利用爬虫工具抓取所述对象标识对应的对象属性。最后,判断抓取的对象属性与所述第二缓存中存储的与所述对象标识对应的对象属性是否相同,如果不同,则利用抓取的对象属性替换所述数据库中存储的所述对象标识对应的原对象属性,实现所述数据库的更新。
如果所述抓取的对象属性与所述第二缓存中存储的与所述对象标识对应的对象属性相同,则说明该对象标识对应的对象属性没有变化,即不需要更新所述数据库。
S208:获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。
当所述分类网址对应的对象标识中存在从所述第一缓存查询不到的对象标识时,获取所述对象标识,利用爬虫工具抓取所述对象标识对应的对象属性,将所述对象标志和与其对应的对象属性添加到所述数据库中,实现所述数据库的更新。
本实施例中,为了保证后续数据库更新过程中第一缓存和第二缓存中的数据信息与数据库中的数据信息保持一致,所以,本实施例在每次完成数据库更新后,将本次未存在于所述第一缓存中的所述分类网址对应的对象标识添加到第一缓存。并且,将利用爬虫工具抓取的对象属性更新至第二缓存。
另外,本实施例中还存在一种情况,即第一缓存中也可能存在所述分类网址对应的对象标识中没有的对象标识,也就是说,数据库中也没有所述对象标识,所以,本实施例可以利用爬虫工具抓取上述对象标识对应的对象属性,并更新至数据库。
本实施例中预先建立第一缓存,用于存储数据库中的对象标识,当获取分类网址对应的对象标识后,查询所述第一缓存中是否存在所述对象标识,最后获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。由于访问缓存的效率比访问数据库的效率高,所以本实施例中利用第一缓存存储数据库中的对象标识,通过判断第一缓存中是否存在分类网址对应的对象标识,确定数据库是否需要更新。与现有技术比,本实施例能够在减少访问数据库次数的基础上,实现数据库的更新,并提高了数据库的更新效率。
实施例二
参考图3,图3为本实施例提供的商品信息数据库的更新方法流程图,所述方法可以应用于比价购物网站,具体包括:
S301:预先建立商品URL(统一资源定位符)缓存,并将商品信息数据库中的所有商品URL均存入所述商品URL缓存中。
S302:预先建立价格和库存的缓存,并将所述数据库中的商品信息存入所述缓存中,其中,所述商品信息包括商品URL和与所述商品URL对应的商品价格和商品库存等。
另外,由于不同的城市的商品信息可能不同,所以,本实施例中的商品信息还可以包括与所述商品URL对应的不同城市的商品价格和商品库存等。
S303:从分类数据库中获取一个分类网址,并抓取所述分类网址对应的所有商品URL。
通常比价购物网站具有一个分类数据库,用于存储各个电商购物网站的分类URL,为了减少爬虫工具多次重复抓取同一个商品的信息,所以分类数据库中通常存储电商购物网站的末级商品分类,如某电商购物网站的第一级商品分类为“电脑、办公”,该第一级商品分类的第二级商品分类包括“电脑整机”,末级商品分类包括“笔记本”,本实施例的分类数据库中存储“笔记本”分类URL。
由于电商购物网站的一个分类通常对应若干页数的商品信息,所以,本实施例在确定分类网址后,可以首先获取所述分类对应的商品信息的总页数。其次,获取所述分类网址对应的各个页数的URL,并利用爬虫工具分布式抓取各个页数URL对应的商品URL。
S304:在抓取商品URL后,查询预先建立的商品URL缓存中是否存在所述商品URL,如果存在,则执行S305,否则执行S308。
本实施例中,在抓取所述分类网址对应的商品URL后,查询所述商品URL缓存中是否存在所述商品URL,如果存在,则表明数据库中存储了所述商品URL对应的商品信息,进入S305;如果不存在,则表明所述商品URL为电商购物网站新添加的商品,数据库的前一次更新中没有得到该商品的信息,所以,本实施例可以利用所述商品URL更新数据库。
S305:当所述商品URL存在于所述商品URL缓存中时,抓取所述商品URL对应的电商购物网站中的该商品的价格和库存。
由于电商购物网站中不同城市的同一商品的价格和库存通常不同,所以,本实施例也会考虑不同城市的情况,即抓取不同城市的该商品的价格和库存。
S306:在存储有价格和库存的缓存中,获取所述商品URL对应的价格和库存,并与抓取的电商购物网站中该商品的价格和库存比较。
本实施例利用价格和库存的缓存存储数据库中的商品URL对应的价格和库存,通过访问该缓存判断所述数据库是否需要更新,当所述数据库中不存在更新内容时减少对数据库的访问次数。
S307:当抓取的该商品的价格和库存与缓存中存储的不同时,将数据库中的该商品URL对应的价格和库存更新为抓取的所述商品的价格和库存。
为了所述数据库的下一次更新能够更准确,所以本实施例还可以将抓取的该商品的价格和库存替换所述缓存中的该商品的价格和库存,使得该缓存中的商品信息与数据库中的保持一致。
S308:当所述商品URL未存在于所述商品URL缓存中时,抓取所述商品URL对应的电商购物网站中的该商品的价格和库存,并直接添加至数据库中。
由于商品URL缓存中存储的商品URL与数据库中的商品URL保持一致,如果获取的商品URL未存在于商品URL缓存中,则表明其也不存在与数据库中,所以,本实施例可以直接抓取所述商品URL对应的电商购物网站中的该商品的价格和库存,并更新数据库。另外,本实施例还可以利用该商品URL和抓取的该商品的价格和库存更新商品URL缓存及存储价格和库存的缓存,使得他们均与数据库中的信息保持一致。
另外,本实施例中的比价购物网站还存在另一种需要更新的情况,即当电商购物网站的商品处于下架状态时,本实施例也可以根据抓取的商品信息更新数据库。具体的,获取商品URL缓存中与所述分类网址对应的所有商品URL均不同的商品URL,抓取所述商品URL对应的商品价格和库存,并更新数据库。
本实施例利用缓存存储数据库中的商品信息,在判断数据库中的商品信息是否需要更新时,只需要访问缓存中的商品信息,而不需要访问数据库,所以,本实施例的数据库更新方法能够减少访问数据库的次数。
实施例三
参考图4,图4为本实施例提供的一种数据库更新装置结构示意图,所述装置可以包括:
第一获取模块401,用于获取一分类网址后,获取所述分类网址对应的对象标识;
第一查询模块402,用于查询所述第一缓存中是否存在所述分类网址对应的对象标识,所述第一缓存用于存储数据库中的对象标识;
第一更新模块403,用于获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。
参考图5,图5为本实施例提供的另一种数据库更新装置结构示意图,所述装置除了包括图4中的模块,还可以包括:
第二获取模块501,用于获取存在于所述第一缓存中的所述分类网址对应的对象标识;
第一判断模块502,用于抓取所述对象标识对应的对象属性,并判断所述对象属性与所述第二缓存中所述对象标识对应的对象属性是否相同;
第二更新模块503,用于当抓取的所述对象属性与所述第二缓存中所述对象标识对应的对象属性不同时,根据抓取的所述对象属性更新所述数据库。
另外,所述装置还可以包括:
第一添加模块,用于将所述未存在于所述第一缓存中的所述分类网址对应的对象标识添加到所述第一缓存。
具体的,所述第一更新模块,包括:
第一获取子模块,用于获取未存在于所述第一缓存中的所述分类网址对应的对象标识;
第一添加子模块,用于抓取所述对象标识对应的对象属性,并将所述对象标识与所述对象属性添加到所述数据库。
另外,所述装置还包括:
第三更新模块,用于利用抓取的对象属性更新所述第二缓存。
具体的,所述第一获取模块,包括:
第二获取子模块,用于获取一分类网址,以及所述分类网址对应的总页数;
第三获取子模块,用于获取所述分类网址对应的各个页的页标识;
第四获取子模块,用于获取各个页标识对应的对象标识。
其中,所述装置还包括:
第三获取模块,用于获取所述第一缓存中与所述分类网址对应的对象标识不同的对象标识;
第四更新模块,用于抓取所述对象标识对应的对象属性,并更新所述数据库。
本实施例提供的数据库更新装置原理为第一获取模块获取一分类网址后,获取所述分类网址对应的对象标识;第一查询模块查询所述第一缓存中是否存在所述分类网址对应的对象标识,所述第一缓存用于存储数据库中的对象标识;第一更新模块获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。第二获取模块获取存在于所述第一缓存中的所述分类网址对应的对象标识;第一判断模块抓取所述对象标识对应的对象属性,并判断所述对象属性与所述第二缓存中所述对象标识对应的对象属性是否相同;第二更新模块用于当抓取的所述对象属性与所述第二缓存中所述对象标识对应的对象属性不同时,根据抓取的所述对象属性更新所述数据库。
本实施例中预先建立第一缓存,用于存储数据库中的对象标识,当获取分类网址对应的对象标识后,查询所述第一缓存中是否存在所述对象标识,最后获取未存在于所述第一缓存中的所述分类网址对应的对象标识,并根据所述对象标识更新所述数据库。由于访问缓存的效率比访问数据库的效率高,所以本实施例中利用第一缓存存储数据库中的对象标识,通过判断第一缓存中是否存在分类网址对应的对象标识,确定数据库是否需要更新。与现有技术比,本实施例能够在减少访问数据库次数的基础上,实现数据库的更新,并提高了数据库的更新效率。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明实施例所提供的数据库更新方法及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。