Example #1
0
        get_thread_pool.apply_async(get_from_pool, (db, queue))

    # 不使用线程池pool,只使用线程thread实现多线程
    # 这种方式生产线程只有一个,如果要启多个生产线程,需要将输入数据分成几组,传给对应的线程处理,写起来比较麻烦
    # put_thread = Thread(target=put_into_queue,args=(links,song_ids,form_data,queue))
    # put_thread.setDaemon(True)
    # put_thread.start()
    #
    # time.sleep(2)
    #
    # for i in range(3):
    #     get_thread = Thread(target=get_from_queue,args=(db,queue))
    #     get_thread.setDaemon(True)
    #     get_thread.start()

    queue.join()  # 将程序阻塞,等待队列中所有数据都标记为task_done,且queue中无数据时再放通

    db.close()
    # end_time = time.time()
    # print('total time:',str(end_time - start_time))

# 下面都是一些本项目的参考资料
# 建表语句
# create table if not exists day_hot_song(id int primary key auto_increment,ranking int(4),song_id int(15),name varchar(50),singer varchar(20),create_time datetime);

# create table if not exists hot_comment(id int primary key auto_increment,song_id int(15),username varchar(30),content text,like_count int(7),comment_time varchar(30),create_time datetime);

# create table if not exists comment(id int primary key auto_increment,song_id int(15),username varchar(30),content text,like_count int(7),comment_time varchar(30),beReplied_content text,beReplied_user varchar(30),create_time datetime);

# 网易云JS中的关键代码
# var bZH3x=window.asrsea(JSON.stringify(i2x),
Example #2
0
        'phone_num':
        'M6Y3WpfSNET9W4ZwcML1tUx+jvOWtaDKwoUM3ABM+o7AXi8yZKplkUSM3u3R9cN+x4CNZ2Mo/SHFqB8nQWNt9WHEKc3iC0nSfTfbhlLJECCLpB60Cpbo7HKjE9dlY8s7kJY8bCn+xHAXEGg/2avB2SRPFLPo+Nm0JO6R07Sof4U=',
        'pwd':
        'OKNkTFqOU26Adb/9IAvze4K+u6aBHpd9cvBuyRWWAifDyb48wAvLbGUHfj0ZtTvGdg3Y2k8x9EyzcvW/G36R9ukCVpa+xJFztKM8GIl1q71OPNSTx0u1+EM6JiZnGxvPWApt0coRLm64BkRBcbhgliSauUlheBBfoAIADSNlXpw='
    }

    headers['Cookie'] = get_Cookie(form_data, headers)
    if headers['Cookie'] is None:
        print('Cookie is None')
        sys.exit()

    # url = 'https://api.xiaoheihe.cn/game/pubg/get_stats_detail/?lang=zh-cn&os_type=iOS&os_version=10.3.3&_time=1548776142&version=1.1.52&device_id=D2AA4D4F-AC80-476C-BFE1-CBD83AB74133&heybox_id=5141514&hkey=06a344301cb7c6cdc1136a62c061c978&fpp=0&mode=solo&nickname=HuYaTV_15310849&region=steam&season=pc-2018-02
    # 上面为抓包拿到的url,经过测试,其他参数可省略,只需下面的url即可
    url1 = 'https://api.xiaoheihe.cn/game/pubg/get_stats_detail/?heybox_id=14909789&region=steam'
    put_thread_pool = ThreadPool(5)
    get_thread_pool = ThreadPool()
    queue = ThreadManager().Queue(
    )  # 线程池之间通信需要用Manager().Queue(),线程间通信用Queue()
    for i in range(len(par)):
        # 利用线程池的优点在于便于控制线程数量,生产线程池中最多有五个生产线程,提高了生产效率,又不会在线程间切换花费太多时间
        put_thread_pool.apply_async(put_into_pool,
                                    (queue, url1, par[i], headers))

    time.sleep(5)  # 让生产者先生产5s,保证queue中有初始数据量

    get_thread_pool.apply_async(get_from_pool, (queue, db))

    queue.join()  # 目的是阻塞主线程

    db.close()