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的迭代器和生成器
Jul 29 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
python快排算法详解
Mar 04 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
python中time库的实例使用方法
Oct 31 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
Python 实现二叉查找树的示例代码
Dec 21 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP读取MySQL数据代码
2008/06/05 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
PHP进程通信基础之信号
2017/02/19 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
限制复选框的最大可选数
2006/07/01 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python中itertools的用法详解
2020/02/07 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
Django values()和value_list()的使用
2020/03/31 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
冰淇淋店的创业计划书
2014/02/07 职场文书
学校后勤岗位职责
2014/02/19 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
长征观后感
2015/06/09 职场文书
2015入党自传书范文
2015/06/26 职场文书
Redis的字符串是如何实现的
2021/10/24 Redis