python爬虫分布式获取数据的实例方法

 更新时间:2020年11月26日 14:51:37   作者:小妮浅浅  
在本篇内容里小编给大家整理的是一篇关于python爬虫分布式获取数据的实例方法,有兴趣的朋友们可以参考下。

在我们进行卫生大扫除的时候,因为工作任务较多,所以我们会进行分工,每个人负责不同的打扫项目。同样分工合作的理念,在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 读写 Matlab Mat 格式数据的操作

    Python 读写 Matlab Mat 格式数据的操作

    这篇文章主要介绍了Python 读写 Matlab Mat 格式数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • 一文带你快速掌握Python LightGBM必备知识点

    一文带你快速掌握Python LightGBM必备知识点

    LightGBM(Light Gradient Boosting Machine)是一种梯度提升树算法的高效实现,这篇文章为大家整理了十个LightGBM必备知识点,希望对大家有所帮助
    2023-06-06
  • Python多分支if语句的使用

    Python多分支if语句的使用

    这篇文章主要介绍了Python多分支if语句的使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • python基础_文件操作实现全文或单行替换的方法

    python基础_文件操作实现全文或单行替换的方法

    下面小编就为大家带来一篇python基础_文件操作实现全文或单行替换的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 基于Pytorch实现分类器的示例详解

    基于Pytorch实现分类器的示例详解

    这篇文章主要为大家详细介绍了如何基于Pytorch实现两个分类器: softmax分类器和感知机分类器,文中的示例代码讲解详细,需要的可以参考一下
    2023-04-04
  • python3判断IP地址的方法

    python3判断IP地址的方法

    这篇文章主要为大家详细介绍了python3判断IP地址的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • python 中关于pycharm选择运行环境的问题

    python 中关于pycharm选择运行环境的问题

    这篇文章主要介绍了python 中关于pycharm选择运行环境的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Python使用sorted对字典的key或value排序

    Python使用sorted对字典的key或value排序

    这篇文章主要介绍了Python使用sorted对字典的key或value排序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 解决Python下json.loads()中文字符出错的问题

    解决Python下json.loads()中文字符出错的问题

    今天小编就为大家分享一篇解决Python下json.loads()中文字符出错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python分割一个文本为多个文本的方法

    python分割一个文本为多个文本的方法

    这篇文章主要为大家详细介绍了python分割一个文本为多个文本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论