Mongodb去除重复的数据,pymongo去重

接上一篇的,发现爬斗鱼主播信息存入Mongodb数据库后,发现很多重复的数据,毕竟斗鱼不可能有这么多的主播,所以很多页是有重复的主播房间的。

查了一下怎么去重,发现比较麻烦,与其存入重复的数据后面再去重,还不如在存入数据库的时候就检查,不去存入重复的数据,这样就避免了后期再去做去重工作。于是改动如下:

#-*- coding:utf-8 -*-
#_author:John
#date:2018/10/25 0:07
#softwave: PyCharm
import requests
import json
from multiprocessing import Pool
import pymongo

client = pymongo.MongoClient(‘localhost‘)
db = client[‘douyu‘]

def single_page_info(page):
    respones = requests.get(‘https://www.douyu.com/gapi/rkc/directory/0_0/{}‘.format(page))
    datas = json.loads(respones.text)
    items = datas[‘data‘][‘rl‘]
    for item in items:
        data = {
            ‘标题‘: item[‘rn‘],
            ‘主播‘: item[‘nn‘],
            ‘人气‘ : item[‘ol‘],
        }
        if db[‘ajax_spider_quchong‘].update({‘主播‘:data[‘主播‘]}, {‘$set‘: data}, True):
            print(‘Save to Mongo, {}‘.format(data))
        else:
            print(‘Save to Mong fail, {}‘.format(data))
    print(‘已经完成第{}页‘.format(page))

if __name__ == ‘__main__‘:
    pool = Pool()
    #多线程抓200页
    pool.map(single_page_info, [page for page in range(1, 200)])

原文地址:https://www.cnblogs.com/lkd8477604/p/9848958.html

时间: 2024-08-30 04:17:10

Mongodb去除重复的数据,pymongo去重的相关文章

mongodb去除重复的数据(二)

前天因为工作需要,开始着手对数据库中两千多万的数据中其中一个字段重复的数据进行去重. 原本使用一些测试的数据测试后,前天写的那个方法是可行的,但是当面对这个两千万的真实数据时,我却发现这方法有些不顶用了,最终只好又经过若干次的尝试,总算成功去重. 最终总结一下整个过程: 1.这个方法就是上一篇所讲的,利用mongodb的游标dbcursor和while循环的方式. var res=db.test.find(); while(res.hasNext()){ var res1=db.test.fin

mongodb去除重复的数据

今天出现了一个新的需求,有个部门需要拿到mongodb中的数据,要求去掉其中一个字段内容相同的数据. 虽然mongodb中有distinct来去重,但是和mysql的distinct不同的是,mysql中能用distinct * 返回整条记录的信息,而mongodb的distinct我却只是返回去重的那个字段的数据(或许mongodb也可以返回整条,但是我不知道). mysql中的distinct返回完整记录: mongodb中distinct去重某个字段: 上边的内容并不是我想看到的结果,因此

去除重复的数据

在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 代码: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",@"2014-04-02",@"2014-04-03", @&

java 数组如何去除重复的数据?

java数组去重example: String[] str={"john","lily","lily","lucy"}; List<String> list=new ArrayList<String>(); for(int i=0;i<str.length;i++){ if(!list.contains(str[i])){ list.add(str[i]); } }

查询重复的数据

我们先准备一张表,结果如图: 现在我们查询一下重复的数据,那就是张三了,我们应该怎么写呢?应该这样写 select * from usertb where name in (select name from usertb group by name having count (name) > 1) 输出结果:.如图: 大家有木有发现,我明明有这些字段和表,为什么还显示无效就是红色的波浪线呢,原因是 原因是SQL Server的intellisense(智能感知功能)需要重新整理一下,用快捷键Ct

mongodb中处理插入数据去重问题

最近在写一个爬虫工具,将网站的数据储存到mongodb中,由于数据有重复的,所以我就在建立数据库的时候,为集合建立了索引,下面说下我的步骤,集合名称为drugitem, 下面是集合截图: 我要为name字段创建唯一索引,因为要保证name没有重复: 就这样我运行程序发现数据比原来没有设置唯一索引时少了好多,我仔细查看发现程序在name字段重复的地方停止了,这不是我想要的结果,因为后面的数据还没有查询完成.于是我就删除了原来创建的name索引: 然后remove数据,重新按照老办法重新抓取数据,这

使用aggregate在MongoDB中查找重复的数据记录

我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我们无法保证每一次的数据库save操作都是原子型的.也就是说,如果客户端连续两次发起同一事件将数据存入数据库,很可能会导致数据被重复保存.高并发的情况下,哪怕是你在代码中已经做了非常严格的校验,例如插入数据前判断要保存的数据是否已经存在,但仍然有可能会出现数据被重复保存的风险.因为在异步执行中,你没有

mysql 去除重复数据 语句

纠结的过程: mysql> select * from role group by role_name,deleted; +---------+-----------+---------+ | role_id | role_name | deleted | +---------+-----------+---------+ | 2 | xue | 12 | | 1 | zhao | 12 | | 3 | zhao | 13 | +---------+-----------+---------+

JAVA数组去除重复数据

一.用List集合实现   int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<str.length; i++) { if(!list.contains(str[i])) { list.add(str[i]); } } System.out.println("去除重复后的list集合"+list); 输出结果是