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迭代用法实例教程
Sep 08 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
简单了解python单例模式的几种写法
Jul 01 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
如何用python免费看美剧
Aug 11 Python
Python如何读写CSV文件
Aug 13 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 Python
Python实现文字pdf转换图片pdf效果
Apr 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实现显示照片exif信息的方法
2014/07/11 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
JavaScript闭包详解
2015/02/02 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
python实现挑选出来100以内的质数
2015/03/24 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
介绍一下游标
2012/01/10 面试题
物业客服专员岗位职责
2013/11/30 职场文书
致800米运动员广播稿
2014/02/16 职场文书
退学证明范本3篇
2014/10/29 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
三好学生评语大全
2014/12/29 职场文书
政协工作总结2015
2015/05/20 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
中秋晚会致辞
2015/07/31 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS