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+Django在windows下的开发环境配置图解
Nov 11 Python
使用Python脚本将绝对url替换为相对url的教程
Apr 24 Python
Python实现将xml导入至excel
Nov 20 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Python中字符串与编码示例代码
May 20 Python
python二进制文件的转译详解
Jul 03 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
Python while循环使用else语句代码实例
Feb 07 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
Python利用myqr库创建自己的二维码
Nov 24 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删除数组中特定元素的两种方法
2013/07/02 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
php判断表是否存在的方法
2015/06/18 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
python中from module import * 的一个坑
2014/07/20 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
django如何自己创建一个中间件
2019/07/24 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
护士专业推荐信
2013/11/02 职场文书
护理中职生求职信范文
2014/02/24 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
借款民事起诉状范文
2015/05/19 职场文书
运动会新闻报道稿
2015/07/22 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
德劲DE1105机评
2022/04/05 无线电
Redis唯一ID生成器的实现
2022/07/07 Redis