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