python获取数据的方法_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')

分布式爬虫架构图

20171123100941539.jpg?2017102310957

到此这篇关于python爬虫分布式获取数据的实例方法的文章就介绍到这了,更多相关python爬虫如何分布式获取数据?内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值