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爬虫如何分布式获取数据?内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速解决jupyter notebook启动需要密码的问题

    快速解决jupyter notebook启动需要密码的问题

    这篇文章主要介绍了快速解决jupyter notebook启动需要密码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python远程控制Windows服务器的方法总结

    Python远程控制Windows服务器的方法总结

    在信息时代的洪流中,掌握一门编程语言已经成为一项必备技能,Python,这门以简洁、易学、强大著称的编程语言,更是成为无数开发者的大宝剑,今天,我们要探讨的就是如何用 Python 远程控制 Windows 服务器,需要的朋友可以参考下
    2024-07-07
  • 关于python3的ThreadPoolExecutor线程池大小设置

    关于python3的ThreadPoolExecutor线程池大小设置

    这篇文章主要介绍了关于python3的ThreadPoolExecutor线程池大小设置,线程池的理想大小取决于被提交任务的类型以及所部署系统的特性,需要的朋友可以参考下
    2023-04-04
  • 使用Django+Vue编写一个文件上传器

    使用Django+Vue编写一个文件上传器

    本教程中,我将会使用Django和Vue创建一个支持多文件上传的文件上传器,您可以在单个文件和多个文件上传之间选择在应用中进行上传操作,文章通过代码示例截杀的非常详细,需要的朋友可以参考下
    2023-11-11
  • Python Sqlite3以字典形式返回查询结果的实现方法

    Python Sqlite3以字典形式返回查询结果的实现方法

    下面小编就为大家带来一篇Python Sqlite3以字典形式返回查询结果的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • python+opencv+caffe+摄像头做目标检测的实例代码

    python+opencv+caffe+摄像头做目标检测的实例代码

    今天小编就为大家分享一篇python+opencv+caffe+摄像头做目标检测的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • python判断字符串是否是json格式方法分享

    python判断字符串是否是json格式方法分享

    这篇文章主要介绍了python判断字符串是否是json格式方法分享,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 提升Python编程效率的列表操作方法示例

    提升Python编程效率的列表操作方法示例

    这篇文章主要为大家介绍了提升Python编程效率的列表操作方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Django基础知识与基本应用入门教程

    Django基础知识与基本应用入门教程

    这篇文章主要介绍了Django基础知识与基本应用,结合实例形式分析了Django框架基本的项目创建、启动、查看版本等操作,并结合一个简单的blog应用示例分析了Django的基本使用方法,需要的朋友可以参考下
    2018-07-07
  • Python基于随机采样一至性实现拟合椭圆

    Python基于随机采样一至性实现拟合椭圆

    这篇文章主要为大家详细介绍了Python如何基于随机采样一至性实现拟合椭圆,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2022-11-11

最新评论