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运算符重载用法实例分析
Jun 01 Python
python 重命名轴索引的方法
Nov 10 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
pybind11在Windows下的使用教程
Jul 04 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
Python flask路由间传递变量实例详解
Jun 03 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Python利用命名空间解析XML文档
Aug 10 Python
Python自动化测试基础必备知识点总结
Feb 07 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
php array的学习笔记
2012/05/10 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
简单谈谈js的数据类型
2017/09/25 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
基于Python代码编辑器的选用(详解)
2017/09/13 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
python/golang 删除链表中的元素
2020/09/14 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
大专生简历的自我评价
2013/11/26 职场文书
财务管理专业求职信
2014/06/11 职场文书
护士求职自荐信范文
2015/03/04 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
python数字转对应中文的方法总结
2021/08/02 Python