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 30 Python
Python实现telnet服务器的方法
Jul 10 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
Python设计模式之原型模式实例详解
Jan 18 Python
详解Python3序列赋值、序列解包
May 14 Python
python输出决策树图形的例子
Aug 09 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
python 工具 字符串转numpy浮点数组的实现
Mar 14 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 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中使用excel的简单介绍
2013/08/02 PHP
php简单日历函数
2015/10/28 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
Vue中render方法的使用详解
2018/01/26 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python如何判断数独是否合法
2016/09/08 Python
多版本Python共存的配置方法
2017/05/22 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python conda操作方法
2019/09/11 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
档案管理员岗位职责
2013/12/01 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
中秋节活动总结
2014/08/29 职场文书
黄河绝恋观后感
2015/06/08 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL