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打开文件并获取文件相关属性的方法
Apr 23 Python
Python科学计算之NumPy入门教程
Jan 15 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
Python简单计算数组元素平均值的方法示例
Dec 26 Python
使用matplotlib画散点图的方法
May 25 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
Python 面试中 8 个必考问题
Nov 16 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
python进度条显示-tqmd模块的实现示例
Aug 23 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 连接mssql数据库 初学php笔记
2010/03/01 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
php数组键值用法实例分析
2015/02/27 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
vue 页面跳转的实现方式
2021/01/12 Vue.js
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
Python类的专用方法实例分析
2015/01/09 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
关于毕业的中学校园广播稿
2014/01/26 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python