python爬虫分布式获取数据的实例方法


Posted in Python onNovember 26, 2020

在我们进行卫生大扫除的时候,因为工作任务较多,所以我们会进行分工,每个人负责不同的打扫项目。同样分工合作的理念,在python分布式爬虫中也得到了应用。我们需要给不同的爬虫分配指令,让它们去分头行动获取同一个网站的数据。那么这些爬虫是怎么分工搜集数据的呢?感兴趣的小伙伴,我们可以通过下面的示例进行解惑。

假设我有三台爬虫服务器A、B和C。我想让我所有的账号登录任务分散到三台服务器、让用户抓取在A和B上执行,让粉丝和关注抓取在C上执行,那么启动A、B、C三个服务器的celery worker的命令就分别是

celery -A tasks.workers -Q login_queue,user_crawler worker -l info -c 1 # A服务器和B服务器启动worker的命令,它们只会执行登录和用户信息抓取任务。

celery -A tasks.workers -Q login_queue,fans_followers worker -l info -c 1 # C服务器启动worker的命令,它只会执行登录、粉丝和关注抓取任务。

然后我们通过命令行或者代码(如下)就能发送所有任务给各个节点执行了

# coding:utf-8
from tasks.workers import app
from page_get import user as user_get
from db.seed_ids import get_seed_ids, get_seed_by_id, insert_seeds, set_seed_other_crawled
@app.task(ignore_result=True)
def crawl_follower_fans(uid):
  seed = get_seed_by_id(uid)
  if seed.other_crawled == 0:
    rs = user_get.get_fans_or_followers_ids(uid, 1

    rs.extend(user_get.get_fans_or_followers_ids(uid, 2))
    datas = set(rs)
    # 重复数据跳过插入
    if datas:
      insert_seeds(datas)
    set_seed_other_crawled(uid)
@app.task(ignore_result=True)
def crawl_person_infos(uid):
  ""
  根据用户i来爬取用户相关资料和用户的关注数和粉丝数(由于微博服务端限制,默认爬取前五页,企业号的关注和粉丝也不能查看)
  :param uid: 用户id
  :return:
  """
  if not uid:
    return
  # 由于与别的任务共享数据表,所以需要先判断数据库是否有该用户信息,再进行抓取
  user = user_get.get_profile(uid)
  # 不抓取企业号
  if user.verify_type == 2:
    set_seed_other_crawled(uid)
    return
  app.send_task('tasks.user.crawl_follower_fans', args=(uid,), queue='fans_followers',
         routing_key='for_fans_followers')
@app.task(ignore_result=True)
def excute_user_task():
  seeds = get_seed_ids()
  if seeds:
    for seed in seeds:
      # 在send_task的时候指定任务队列
      app.send_task('tasks.user.crawl_person_infos', args=(seed.uid,), queue='user_crawler',
             routing_key='for_user_info')

分布式爬虫架构图

python爬虫分布式获取数据的实例方法

到此这篇关于python爬虫分布式获取数据的实例方法的文章就介绍到这了,更多相关python爬虫如何分布式获取数据?内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
从零学python系列之数据处理编程实例(一)
May 22 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
Python Flask-web表单使用详解
Nov 18 Python
python实现周期方波信号频谱图
Jul 21 Python
Pandas0.25来了千万别错过这10大好用的新功能
Aug 07 Python
python使用sessions模拟登录淘宝的方式
Aug 16 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
python分布式爬虫中消息队列知识点详解
Nov 26 #Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 #Python
使用OpenCV校准鱼眼镜头的方法
Nov 26 #Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 #Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 #Python
Django celery异步任务实现代码示例
Nov 26 #Python
Django通过设置CORS解决跨域问题
Nov 26 #Python
You might like
PHP技术开发技巧分享
2010/03/23 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
PHP修改session_id示例代码
2014/01/08 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
splice slice区别
2006/10/09 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
javascript控制台详解
2015/06/25 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
使用vuex的state状态对象的5种方式
2018/04/19 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
python实现求特征选择的信息增益
2018/12/18 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
生物技术研究生自荐信
2013/11/12 职场文书
初中化学教学反思
2014/01/23 职场文书
师德学习感言
2014/01/31 职场文书
企业精神口号
2014/06/11 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
护理心得体会范文
2016/01/22 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS