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 相关文章推荐
Java分治归并排序算法实例详解
Dec 12 Python
Tensorflow之Saver的用法详解
Apr 23 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
python将一组数分成每3个一组的实例
Nov 14 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
python给微信好友定时推送消息的示例
Feb 20 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
Django与pyecharts结合的实例代码
May 13 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
python 基于Apscheduler实现定时任务
Dec 15 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 empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
CI框架整合smarty步骤详解
2016/05/19 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
vue elementui form表单验证的实现
2018/11/11 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
Python程序退出方式小结
2017/12/09 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
大学毕业后的十年规划
2014/01/07 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
总经理任命书
2014/03/29 职场文书
学习雷锋倡议书
2014/04/15 职场文书
初中英语课后反思
2014/04/25 职场文书
学校文明单位申报材料
2014/05/06 职场文书
慈善晚会策划方案
2014/05/14 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
怎样写离婚协议书
2014/09/10 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
win10下go mod配置方式
2021/04/25 Golang
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS