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 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
python timestamp和datetime之间转换详解
Dec 11 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
浅谈python 中类属性共享的问题
Jul 02 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
Flask中endpoint的理解(小结)
Dec 11 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 Python
利用python实现后端写网页(flask框架)
Feb 28 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异常处理使用示例
2014/02/25 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
php自动加载代码实例详解
2021/02/26 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
详解爬虫被封的问题
2019/04/23 Python
自定义django admin model表单提交的例子
2019/08/23 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python 实现多维数组转向量
2019/11/30 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
暑期研修感言
2014/02/17 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
教育实习指导教师评语
2014/12/31 职场文书
表扬信范文
2015/05/04 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL