mysql,mongodb,redis在windows应用

2019-03-12  本文已影响0人  指向远方的灯塔

1.mysql

启动服务器
net start mysql
关闭服务器
net stop mysql
登录mysql(连接mysql)
mysql -u root -p
然后输入密码
如果要登录远程数据库,1.需要远程数据库给予权限
远程计算机进入mysql环境输入:
grant select on 数据库.* to 用户名@登录主机 identified by '密码'
例如:grant select,insert,update,delete on zhaogao.qin to root@192.168.1.103 identified by '123';
注【允许:主机为192.168.1.103的电脑以用户root,密码123登录,并在zhaogao库下的qin表中执行增删查改】
2.然后登录,代码如下
mysql -h 192.168.1.103 -uroot -p123
退出mysql
exit

2.mongodb

启动服务器
net start mongodb
关闭服务器
net stop mongodb
登录mongodb
mongo
退出mongodb
exit
远程连接参照如下:
https://www.cnblogs.com/kimkat/p/9192785.html

3.redis

https://www.cnblogs.com/panter/p/6801210.html
(1)redis在windows下原本是不支持的,后来开发人员开发了一个redis在windows下的配置文件,于是redis可以在windows下应用,但每次使用需要将配置文件添加在启动服务器命令后面
(2)redis原本只能本机链接和设置键值,通过配置其他计算机也可以链接和设置键值。找到redis.windows.conf文件,该文件就是redis在windows下能够使用的重要文件,除了命令中添加该文件,配置允许远程链接也是在该文件。

#bind 127.0.0.1                            注释这行    第56行左右
protected-mode no                      将yes修改为no           第75行左右

3.启动服务器

redis-server.exe "F:\Redis\redis.windows.conf"
启动之后该cmd窗口不能关闭,如果关闭窗口,服务器也关闭。

4.登录redis数据库,在新开启的cmd窗口下输入以下命令

redis-cli         回车
出现127.0.0.1:6379>输入ping
得到PONG
证明登录成功
其他用户想要链接可以输入:redis-cli -h IP地址
redisdesktopmanager链接redis参照该网站https://www.cnblogs.com/hltswd/p/6223824.html

5.redis在scrapy中的分布式部署

核心思想:将scrapy中的调度器放到公共的redis中,该redis既是服务端也是客户端,其他人链接该redis,共同完成任务。
实现方法:基于scrapy的组件scrapy-redis来实现

pip install scrapy-redis

scrapy-redis主要实现了以下几步:(1)调度器放到了redis中
(2)实现了一个管道,保存到redis中
(3)重写了两个类Spider(RedisSpider),CrawlSpider(RedisCrawlSpider)

配置代码 https://github.com/rmax/scrapy-redis

按照example-project中example进行配置即可,若你配置的模板是crawlspider选择mycrawler_redis.py爬虫文件;若你配置的模板是spider选择myspider_redis.py文件夹

配置完之后,所有人进入项目中的spiders下的cmd中输入启动指令:
scrapy runspider zixi.py
你会发现程序运行一会卡住啦,因为没有起始的url,接下来添加起始的url
具有服务端的一方到redis客户端输入指令:
lpush zixispider:start_urls 'http://699pic.com/people.html'

注【zixi为爬虫文件名字】

☺成功实现分布式部署☺

配置文件如下:

from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

from scrapy_redis.spiders import RedisCrawlSpider


class MyCrawler(RedisCrawlSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'mycrawler_redis'
    
    # start_urls 这个列表,将起始的url放入到redis_key这个队列里面即可
    # 队列  lpush
    redis_key = 'mycrawler:start_urls'

    rules = (
        # follow all links
        Rule(LinkExtractor(), callback='parse_page', follow=True),
    )

    # 以前定义域名列表是通过属性方式定义,现在通过构造方法动态定义
    # 但是,这个构造方法是一个坑,不能用,还得使用allowed_domains
    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(MyCrawler, self).__init__(*args, **kwargs)

    def parse_page(self, response):
        return {
            'name': response.css('title::text').extract_first(),
            'url': response.url,
        }
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule
from imagepro.items import ImageproItem
from scrapy_redis.spiders import RedisCrawlSpider

class ZixiSpider(RedisCrawlSpider):
    name = 'zixi'
    allowed_domains = ['699pic.com']
    # start_urls = ['http://699pic.com/people.html']
    redis_key = 'zixispider:start_urls'

    # 指定规则
    # 详情页规则
    detail_link = LinkExtractor(restrict_xpaths='//div[@class="list"]/a')
    # 页码规则
    page_link = LinkExtractor(allow=r'/photo-0-6-\d+-0-0-0\.html')
    rules = (
        Rule(page_link, follow=True),
        Rule(detail_link, callback='parse_item', follow=False)
    )

    # 定制自己的配置选项
    custom_settings = {
        # 去重队列使用scrapy-redis的去重队列
        'DUPEFILTER_CLASS': "scrapy_redis.dupefilter.RFPDupeFilter",
        # 使用scrapy-redis的调度器
        'SCHEDULER': "scrapy_redis.scheduler.Scheduler",
        # 是否运行暂停
        'SCHEDULER_PERSIST': True,
        'ITEM_PIPELINES': {
            # 将数据保存到redis的管道
            'scrapy_redis.pipelines.RedisPipeline': 400,
        },
        # 配置redis的ip和端口
        'REDIS_HOST': '10.0.111.220',
        'REDIS_PORT': 6379,
        'DOWNLOAD_DELAY': '1',
    }

    def parse_item(self, response):
        # 创建一个对象
        item = ImageproItem()
        # 获取名字
        item['name'] = response.xpath('//div[@class="photo-view"]/h1/text()').extract()[0].replace(' ', '')
        # 发布时间
        item['publish_time'] = response.css('.publicityt::text').extract()[0].strip(' 发布')
        item['look'] = response.xpath('//span[@class="look"]/read/text()').extract()[0]
        item['collect']=response.css('.collect::text')[0].extract().replace(',','').strip('收藏') .strip()
        item['download']=''.join(response.css('span.download::text').extract()).replace('\t','').replace('\n','').strip('下载').strip().replace(',','')
        item['image_src']=response.xpath('//img[@id="photo"]/@src')[0].extract()

        yield item

上一篇 下一篇

猜你喜欢

热点阅读