更新了爬虫第3天文档

pull/6/head
jackfrued 2018-05-29 20:21:13 +08:00
parent b3a88734fd
commit 8adc03157a
12 changed files with 191 additions and 4 deletions

View File

@ -6,9 +6,196 @@
### 使用NoSQL ### 使用NoSQL
#### Redis #### Redis简介
Redis是REmote DIctionary Server的缩写它是一个用ANSI C编写的高性能的key-value存储系统与其他的key-value存储系统相比Redis有以下一些特点也是优点
- Redis的读写性能极高并且有丰富的特性发布/订阅、事务、通知等)。
- Redis支持数据的持久化RDB和AOF两种方式可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据同时还提供hash、list、setzset、hyperloglog、geo等数据类型。
- Redis支持主从复制实现读写分析以及哨兵模式监控master是否宕机并调整配置
#### Redis的安装和配置
可以使用Linux系统的包管理工具如yum来安装Redis也可以通过在Redis的[官方网站](https://redis.io/)下载Redis的[源代码](http://download.redis.io/releases/redis-3.2.11.tar.gz)解压缩解归档之后进行构件安装。
```Shell
# wget http://download.redis.io/releases/redis-3.2.11.tar.gz
# gunzip redis-3.2.11.tar.gz
# tar -xvf redis-3.2.11.tar
# cd redis-3.2.11
# make && make install
```
接下来我们将redis-3.2.11目录下的redis.conf配置文件复制到用户主目录下并修改配置文件如果你对配置文件不是很有把握就不要直接修改而是先复制一份再修改这个副本
```Shell
# cd ..
# cp redis-3.2.11/redis.conf redis.conf
# vim redis.conf
```
配置将Redis服务绑定到指定的IP地址和端口。
![](./res/redis-bind.png)
![](./res/redis-port.png)
配置底层有多少个数据库。
![](./res/redis-database.png)
配置Redis的持久化机制 - RDB。
![](./res/redis-save.png)
![](./res/redis-rdb.png)
配置Redis的持久化机制 - AOF。
![](./res/redis-aof.png)
配置访问Redis服务器的验证口令。
![](./res/redis-security.png)
配置Redis的主从复制通过主从复制可以实现读写分离。
![](./res/redis-replication.png)
配置慢查询日志。
![](./res/redis-slow-log.png)
这样我们就完成了Redis的基本配置如果对上面的东西感到困惑可以先系统的了解一下Redis[《Redis开发与运维》](https://item.jd.com/12121730.html)是一本不错的入门读物,而[《Redis实战》](https://item.jd.com/11791607.html)是不错的进阶读物。
#### Redis的服务器和客户端
接下来启动Redis服务器可以将服务器放在后台去运行。
```Shell
# redis-server redis.conf &
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.11 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 12345
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
```
接下来我们尝试用Redis客户端去连接服务器。
```Shell
# redis-cli -h 172.18.61.250 -p 6379
172.18.61.250:6379> auth 1qaz2wsx
OK
172.18.61.250:6379> ping
PONG
172.18.61.250:6379>
```
Redis有着非常丰富的数据类型也有很多的命令来操作这些数据具体的内容可以查看[Redis命令参考](http://redisdoc.com/)在这个网站上除了Redis的命令参考还有Redis的详细文档其中包括了通知、事务、主从复制、持久化、哨兵、集群等内容。
```Shell
172.18.61.250:6379> set username admin
OK
172.18.61.250:6379> get username
"admin"
172.18.61.250:6379> hset student1 name hao
(integer) 0
172.18.61.250:6379> hset student1 age 38
(integer) 1
172.18.61.250:6379> hset student1 gender male
(integer) 1
172.18.61.250:6379> hgetall student1
1) "name"
2) "hao"
3) "age"
4) "38"
5) "gender"
6) "male"
172.18.61.250:6379> lpush num 1 2 3 4 5
(integer) 5
172.18.61.250:6379> lrange num 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
172.18.61.250:6379> sadd fruits apple banana orange apple grape grape
(integer) 4
172.18.61.250:6379> scard fruits
(integer) 4
172.18.61.250:6379> smembers fruits
1) "grape"
2) "orange"
3) "banana"
4) "apple"
172.18.61.250:6379> zadd scores 90 zhao 78 qian 66 sun 95 lee
(integer) 4
172.18.61.250:6379> zrange scores 0 -1
1) "sun"
2) "qian"
3) "zhao"
4) "lee"
172.18.61.250:6379> zrevrange scores 0 -1
1) "lee"
2) "zhao"
3) "qian"
4) "sun"
```
#### 在Python程序中使用Redis
可以使用pip安装redis模块。redis模块的核心是名为Redis的类该类的对象代表一个Redis客户端通过该客户端可以向Redis服务器发送命令并获取执行的结果。上面我们在Redis客户端中使用的命令基本上就是Redis对象可以接收的消息所以如果了解了Redis的命令就可以在Python中玩转Redis。
```Shell
$ pip3 install redis
$ python3
```
```Python
>>> import redis
>>> client = redis.Redis(host='1.2.3.4', port=6379, password='1qaz2wsx')
>>> client.set('username', 'admin')
True
>>> client.hset('student', 'name', 'hao')
1
>>> client.hset('student', 'age', 38)
1
>>> client.keys('*')
[b'username', b'student']
>>> client.get('username')
b'admin'
>>> client.hgetall('student')
{b'name': b'hao', b'age': b'38'}
```
#### MongoDB简介
#### MongoDB的安装和配置
#### 使用MongoDB实现CRUD操作
#### Mongo

View File

@ -48,7 +48,7 @@ def get_matched_parts(page_html, pattern_str, pattern_ignore_case=re.I):
return pattern_regex.findall(page_html) if page_html else [] return pattern_regex.findall(page_html) if page_html else []
# 开始执行爬虫程序并对指定的数据进行持久化操作 # 开始执行爬虫程序
def start_crawl(seed_url, match_pattern, *, max_depth=-1): def start_crawl(seed_url, match_pattern, *, max_depth=-1):
client = redis.Redis(host='120.77.222.217', port=11223, password='1qaz2wsx') client = redis.Redis(host='120.77.222.217', port=11223, password='1qaz2wsx')
charsets = ('utf-8', 'gbk', 'gb2312') charsets = ('utf-8', 'gbk', 'gb2312')

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB