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中break语句的用法
May 14 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python做智能家居温湿度报警系统
Sep 25 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Python装饰器的应用场景代码总结
Apr 10 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
django创建css文件夹的具体方法
Jul 31 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
php 静态变量的初始化
2009/11/15 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
AJAX架构之Dojo篇
2007/04/10 Javascript
Prototype 工具函数 学习
2009/07/23 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
js实现简单点赞操作
2020/03/17 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
反腐倡廉警示教育活动总结
2014/05/05 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
离婚案件被告代理词
2015/05/23 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
法院执行局工作总结
2015/08/11 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android