当前位置: 首页 > news >正文

网站制作机构/排名软件

网站制作机构,排名软件,广州网站托管,微信做任务赚钱的网站之前写脚本爬斗鱼主播信息时用了一个pymongo的去重语句 db[host_info].update({主播: data[主播], 时间: data[时间]}, {$set: data}, True): 这句话以主播和时间为索引判断数据库中如果没有同一主播同一时间的数据就更新到数据库。一开始还是很好用的,爬取速度还可…

  之前写脚本爬斗鱼主播信息时用了一个pymongo的去重语句

db['host_info'].update({'主播': data['主播'], '时间': data['时间']}, {'$set': data}, True):

  这句话以主播和时间为索引判断数据库中如果没有同一主播同一时间的数据就更新到数据库。一开始还是很好用的,爬取速度还可以,但是我的计划是每天晚上爬取黄金时间整点段的数据,几个小时过后数据量就达到了十几万条,然后速度越来越慢,mongodb进程占用cpu率很高,可以看到数据是一条条地存进去。毕竟以十几万条数据为基准去重工作量很大,随着数据量的增长会更加慢,直到我的电脑爆掉。

 

  仔细分析了一下,我用主播和时间作为索引,每一个整点爬取一次,所以每一次爬取的时间肯定不一样,也就是每一次爬的过程中可能会有重复数据,次与次之间不会存在重复数据。于是就把数据先放入一个空的临时数据表中,仍然用上面的去重方法做去重,等数据全部爬完后再把临时空数据库中的数据存入主数据库中,这时只需要插入,不需要去重,存入的速度是很快的。

#-*- coding:utf-8 -*-
#_author:John
#date:2018/12/29 20:11
import time
from functools import partial
import requests
import json
from multiprocessing import Pool
import pymongo
import datetimeclient = pymongo.MongoClient('localhost')
db = client['douyu']def single_page_info(page, cur_time):# 防止网络无响应,重试3次for i in range(3):try:respones = requests.get('https://www.douyu.com/gapi/rkc/directory/0_0/{}'.format(page))breakexcept Exception as E:print(E)respones = Nonetime.sleep(10)if respones:datas = json.loads(respones.text)items = datas['data']['rl']for item in items:data = {'标题': item['rn'],'主播': item['nn'],'人气': item['ol'],'类别': item['c2name'],'房间号': item['rid'],'时间': cur_time}# 用临时数据表完成此次爬虫的去重工作,在程序结束前把临时数据表删除if db['host_info_draft'].update({'主播': data['主播']}, {'$set': data}, True):print('Save to Mongo, {}'.format(data))else:print('Save to Mong fail, {}'.format(data))print('已经完成第{}页'.format(page))# 存入主数据表
def write_to_primary_db(data):db['host_infos'].insert_one(data)
# 删除临时数据表
def drop_draft():db.drop_collection('host_info_draft')if __name__ == '__main__':pool = Pool()print('start')# 多线程抓200页while True:# 判断当前时间是否为整点,如果是则开始爬虫程序minute = datetime.datetime.now().strftime('%M')if int(minute) < 2:# 把初始时间传入作为此次爬虫统一时间,python3用partial可以在map中传入的函数传递参数cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')pool.map(partial(single_page_info, cur_time=cur_time), [page for page in range(1, 201)])print('Move the temporary table to the primary table')pool.map(write_to_primary_db, [data for data in db['host_info_draft'].find()])print('End with this cycle')drop_draft()sleep_time = 60 - int(datetime.datetime.now().strftime('%M'))time.sleep(sleep_time*60)else:time.sleep(58)# cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M')# pool.map(partial(single_page_info, cur_time=cur_time), [page for page in range(1, 201)])# drop_draft()

 

转载于:https://www.cnblogs.com/lkd8477604/p/10201137.html

http://www.lbrq.cn/news/1043263.html

相关文章:

  • 乌鲁木齐在线/搜索引擎优化的基本手段
  • wordpress站点前台请求数过多/互联网营销公司
  • 给企业做网站如何定价/江西网络推广seo
  • 自适应产品网站模板/网站建设明细报价表
  • 湖北专业网站建设维修电话/百度大全免费下载
  • 做网站不难吧/东莞市优速网络科技有限公司
  • 杭州网站建设前三/网站维护合同
  • 品牌营销策略有哪些/外贸网站优化
  • 系部网站开发项目的目的/猪八戒网接单平台
  • wordpress站点安装/怎么拿到百度推广的代理
  • 博罗做网站技术/百度上做推广怎么收费
  • 网站软文设计/社区推广
  • 用帝国做的网站/360优化大师旧版本
  • 做新浪微博网站需要/抖音关键词搜索排名
  • 广州汽车网站建设/做百度推广的网络公司
  • 浙江建设职业技术学院oa网站/培训心得体会范文500字
  • 深圳设计装修公司/网站seo排名优化
  • 用http做网站隐藏端口/seo是什么工作
  • 中英文网站如何建设/厦门人才网招聘
  • 长安网站建设网络推广/大型网站建设
  • 宁波网站公司/辽宁seo推广
  • 福田官网网站/百度seo关键词排名
  • 网站建设套/河南网站建设定制
  • 南宁微网站制作需要多少钱/今日国内新闻大事件
  • 男女生做爰视频网站/重要新闻今天8条新闻
  • 甘肃企业模板建站信息/营销型网站建设模板
  • b2c 网站导航栏设计/企业新闻稿发布平台
  • dw如何用表格做网站/东营百度推广电话
  • 厦门网站建设哪家便宜/承德seo
  • 地址二地址三2021变更/seo国外推广软件
  • 深度学习和神经网络最基础的mlp,从最基础的开始讲
  • 《解锁 C++ 进阶密码:引用补充与内联函数、nullptr 核心用法》
  • 论文阅读:Aircraft Trajectory Prediction Model Based on Improved GRU Structure
  • 《设计模式》策略模式
  • nginx 反向代理传递原始域名
  • 一键复制产品信息到剪贴板