2020/04/08 07-RabbitMQ类应用实现异步爬虫

上次把类抽象出来,messagequeue,如果要测试,就需要两边一个生产数据一个消费数据,consumer用的话就要配合start_consuming
在这里插入图片描述
start_consuming这里就会阻塞,你就要想办法起线程
在这里插入图片描述
start_consuming是在所有的sonsume都cancel完了才停止

t12里要把这3个替换掉
在这里插入图片描述
以后提取url的也是专门的程序,可能也跑了很多个进程,这些进程也分布在不同的节点上
在这里插入图片描述
urls对象就跟其他urls对象就没关系了,因为跑在不同的节点上,一点关系也没有

在这里插入图片描述
这就是把生产者写好了

在这里插入图片描述
生产者要是写好了,你做的事情就是直接把数据往里面打

在这里插入图片描述
crawler爬虫既有生产者和消费者,首先消费urls里的东西,往htmls里生产。如果拿到none,就等1秒再拿,可以把try异常放外层
在这里插入图片描述

打印一下异常,以前是用queue从里面拿数据,现在是消费者拿一个数据回来,但是拿回来有可能是none,如果是none就等1秒再拿,如果不是none就快速的去消费
在这里插入图片描述
间隔时间做下适当调整,不然发起的请求太快了,爬取是发起requesy请求,最好时间做下间隔,不要疯狂爬取,疯狂爬取很容易被人拒绝
在这里插入图片描述

在这里插入图片描述
parse解析也是两样东西,是对htmls队列的消费者,对outputs的一个生产者。html=c.recvmsg从里面拿到数据,拿到数据后进行分析,分析的时候有可能也产生一些问题,拿到数据后,产生我们要的数据,现在把产生的数据sendmsg

在这里插入图片描述
persist最后就一个消费者了
在这里插入图片描述
body要一个string或者unicode

在这里插入图片描述
我们现在的类型不行,不符合要求的string
在这里插入图片描述
这里直接链接起来,到时候直接拆开即可,因为数据已经传到消息队列,消息队列离开了python环境,序列化和反序列化就没法用了。
序列化和反序列化用过的就是json式的,python自己用的pickle,高效二进制的MessagePack。(这里要string或者unicode)除非做base64编码,既然要把二进制压缩再做base64,还不如json

在这里插入图片描述
从队列里拿可能有风险,会有none,等着出错

在这里插入图片描述
这里有可能返回none
在这里插入图片描述
这次用序列化方式换掉
在这里插入图片描述准备用前面的simplejson来序列化掉
在这里插入图片描述
dumps,就这两个值做文本序列化,用json做文本序列化时比较好的选择
在这里插入图片描述
这边拿到数据就可以直接对数据进行解构,内部的处理数据,速度快点也可以,不是对外访问。如果拿到数据为none就等1秒
在这里插入图片描述
把这个数据再这里装载一下
在这里插入图片描述
这个数据是个字典就可以用get,有错误就给外面,这样就可以去爬取相应的内容,这样就各玩各的
在这里插入图片描述
现在producer和consumer不互相通信,你要是通信了就可以称为某种意义上的分布式服务了

**现在是多线程的运行,首先是启动gen_url
**
在这里插入图片描述
起一个把url搞定了,起多个需要去重在这里插入图片描述
消费url,然后拿到结果,在把结果返回到queue里

在这里插入图片描述
parse另一个消费者,就要从里面去消费数据,解析这个数据,把字符串进行序列化,然后把数据打入到outputs里去

在这里插入图片描述
加载进来,把数据提取出来,拿到数据将它写数据
在这里插入图片描述
把之前的删除干净

在这里插入图片描述

把交换机和queue全部删除
在这里插入图片描述
执行一下

在这里插入图片描述
相对导入就这么直接用了
在这里插入图片描述
线程都已经起来了

在这里插入图片描述
这里就可以看到在运行了

在这里插入图片描述
这个里面什么变化没有,可能出了问题

在这里插入图片描述
这里不用的先注释掉

在这里插入图片描述
这里数据没人消费了
在这里插入图片描述
这样就行了

在这里插入图片描述
把之前的queue都删除了

在这里插入图片描述
交换机也删除,准备重新来

在这里插入图片描述
运行一下

在这里插入图片描述

在这里插入图片描述
这里数据就开始输出了
在这里插入图片描述
这里就进来了

在这里插入图片描述
rabbitmq通过它来解耦,数据放到这里进行缓冲,然后消费者来消费
在这里插入图片描述
解析的时候对html进行解析,解析的时候会有很多新的链接,这些链接应该加入到url里去,url和html是不断增长的
在这里插入图片描述
只有outputs才是有多少数据都消费完
在这里插入图片描述
现在有三个,加入用同一个队列还要对数据进行判断,是否是url还是html

在这里插入图片描述
写类是一步步抽象出来的

在这里插入图片描述
抽象成函数内部要关联起来就用queue,queue写完之后内部测试没有问题,然后再替换成外面的第三方queue
在这里插入图片描述
再加一下异常判断,在生产环境用没什么问题,让代码更加健壮

在这里插入图片描述
正好3000行,后面分析可以用scrapy
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值