脚本专栏 
首页 > 脚本专栏 > 浏览文章

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

(编辑:jimmy 日期: 2024/11/16 浏览:3 次 )

在我们进行卫生大扫除的时候,因为工作任务较多,所以我们会进行分工,每个人负责不同的打扫项目。同样分工合作的理念,在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基于execjs运行js过程解析
下一篇:celery在python爬虫中定时操作实例讲解
一句话新闻
微软与英特尔等合作伙伴联合定义“AI PC”:键盘需配有Copilot物理按键
几个月来,英特尔、微软、AMD和其它厂商都在共同推动“AI PC”的想法,朝着更多的AI功能迈进。在近日,英特尔在台北举行的开发者活动中,也宣布了关于AI PC加速计划、新的PC开发者计划和独立硬件供应商计划。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 SiteMap