分布式爬取+存储(主:redis-----从:爬虫-----存:mongo)

左边的工作流程:爬虫分别从redis里面取数据,然后进行自己的相关业务逻辑,最终将结果数据保存到公共的数据库中。
右边的工作流程:爬虫分别从redis里面取数据,然后进行自己的相关业务逻辑,最终将结果数据保存到本地自己的数据库中。
==注意:==爬虫可以有多个,所以才称作为分布式爬虫,在取数据的过程中,如果redis中的数据被取完了,爬虫将会进入阻塞状态,等待redis中添加新的数据,再继续工作。
在这里插入图片描述

1、建立redis并向里面添加一个url(这里为了测试所以没有写复杂的其实这里也可以写个爬虫在这里不停的去爬网页的url,爬完之后lpush到redis里面就行了,然后再让爬虫去请求redis不停的拿,不停的存。。。。)
在这里插入图片描述
2、建立爬虫工程

1.scrapy startproject meiju #创建名为meiju的工程
2.cd meiju #进入meiju工程
3.scrapy genspider mj meijutt.com #创建名为mj的爬虫,并且域名为meijutt.com

在这里插入图片描述
spiders下的mj.py就是我们要写爬虫业务逻辑的代码的文件

  • 在setting中配置我们的redis,就加在最后就可以了

#调度器
SCHEDULER = “scrapy_redis.scheduler.Scheduler”
#去重
DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”
#redis服务器地址
REDIS_HOST = ‘localhost’
#redis端口号
REDIS_PORT = 6379
##开启队列
SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.PriorityQueue’

  • 写我们的爬虫程序
  • 注意:是用RedisSpider以及下面要继承的RedisSpider别忘了
from scrapy_redis.spiders import RedisSpider
from meiju.items import MeijuItem
class MjSpider(RedisSpider):
    name = 'mj'
    # allowed_domains = ['meijutt.com']
    # start_urls = ['http://meijutt.com/']
    #对应redis的键
    redis_key = 'meiju'

    def parse(self, response):
        li_list = response.xpath('//ul[@class="top-list  fn-clear"]/li')
        for li in li_list:
            #编号
            num = li.xpath('.//div[@class="lasted-num fn-left"]/i/text()').extract()[0]
            # print(num)
            #标题
            title = li.xpath('.//h5/a/text()').extract()[0]
            # print(title)

            item = MeijuItem()
            item['num'] = num
            item['title'] = title

            yield item

在这里插入图片描述

  • 写items类

Item 是保存爬取到的数据的容器;爬取的主要目标就是从非结构性的数据源提取结构性数据,例如网页。其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

import scrapy


class MeijuItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    num = scrapy.Field() #编号
    title = scrapy.Field() #标题

在这里插入图片描述

  • 写管道
import pymongo

class MeijuPipeline(object):

    def __init__(self):
    	#第一个参数是写目标ip可以写本地,后面的是端口
        self.client = pymongo.MongoClient('10.10.55.143',27017)
        #连接库,没有默认会自己创建
        self.db = self.client['python0325']
    def process_item(self, item, spider):
    	#向表中插入字典类型的数据
        self.db.lihuwei.insert(dict(item))
        return item
    def close_spider(self,spider):
    	#关闭连接
        self.client.close()

#自己的mongo测试用的
# import pymongo
#
# class MeijuPipeline(object):
#
#     def __init__(self):
#         self.client = pymongo.MongoClient('localhost',27017)
#         self.db = self.client['python0325']
#     def process_item(self, item, spider):
#         self.db.lihuwei.insert(dict(item))
#         return item
#     def close_spider(self,spider):
#         self.client.close()

在这里插入图片描述
记得打开管道在setting中
在这里插入图片描述
3、启动主机(运行zhuji.py文件向redis中保存一条数据),查看一下
在这里插入图片描述
4、启动爬虫程序

scrapy crawl mj

5、去mongo数据库中查看是否存进来
在这里插入图片描述
可以看到数据已经进来了,这是我写到了自己本地的库里,有空可以多找几台电脑玩,关键是流程要知道。好了到此结束了,虽然比较low但是一步一步来!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值