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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
详解Python编程中基本的数学计算使用
Feb 04 Python
Python下载指定页面上图片的方法
May 12 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
django表单实现下拉框的示例讲解
May 29 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
如何使用Python标准库进行性能测试
Jun 25 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
python属于跨平台语言码
Jun 09 Python
Python函数的迭代器与生成器的示例代码
Jun 18 Python
Python利用命名空间解析XML文档
Aug 10 Python
什么是Python包的循环导入
Sep 08 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文件读写操作之文件读取方法详解
2011/01/13 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
深入理解Python中各种方法的运作原理
2015/06/15 Python
Python paramiko模块的使用示例
2018/04/11 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
django框架模板语言使用方法详解
2019/07/18 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python imread、newaxis用法详解
2019/11/04 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
工地资料员岗位职责
2013/12/31 职场文书
房地产财务管理制度
2014/02/02 职场文书
优秀经理获奖感言
2014/03/04 职场文书
运动会拉拉队口号
2014/06/09 职场文书
节能环保标语
2014/06/12 职场文书
公务员学习习总书记“三严三实”思想汇报
2014/09/19 职场文书
个人批评与自我批评
2014/10/15 职场文书
销售内勤岗位职责
2015/02/10 职场文书
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android