第23讲
1、两个案例模拟登录
一个是QQ空间登录。通过携带cookies登录
二是Github模拟登录,通过传入表单的方式携带信息登录。
第24讲
1、selenium在scrapy框架里的应用(了解,不常用)
2、将数据保存到MongoDB数据库中,通过创建链接。
3、规则化爬虫:案例 新疆工程学院官网
Rule类是一个类,实例化这个类,得到用于提取数据的规则
LinkExtractor 链接提取器 提取详情页url地址
allow 正则表达式
callback 回调、请求方法处理url
follow 当前url对应响应是否还需要经过rules提取(不重复以前处理过的url)
rules= (Rule(LinkExtractor(allow=r'info/1061/\d+.htm',follow=False)Rule(LinkExtractor(allow=r'[44,46].htm',follow=False))
4、Redis数据库
1、爬虫数据储存:
文本:csv excel text json
数据:MongoDB
分布式爬虫:
web缓存:缓解网页压力
2、redis应用:
3、redis数据类型之string
保存:设置键值
set key value
例如:插入key为name,value为mark
set key value/set name mark
设置过期时间
setex key seconds value
设置多个键值对
mset key1 value1 key2 value2
获取:get
get key 获取键对应的值
key 获取全部的键
获取多个键:mget key1 key2
查询
查询键:keys parament
exists a1 判断a1是否存在
type a1 查看a1保存的内容是什么类型
ttl a1 查看这个键值的到期时间
del name 删除这个键值对
expire key second /expire a1 5 给已存在的数据设置过期时间
incr a1 a1的数据必须为数字 增加1
decr a1 对a1 减1
decrby a1 5 对a1减5
getrange name 1 -1 取mark的第二个到最后一个
*修改数据
setrange
4、list数据类型
列表元素的类型为string
添加元素
lpush a1 1 2 3 4
rpush a2 7 8 9 10 从右侧插入数据
获取
lrange a4 0 -1
没有rrange
注:lpush a2 1,2,3,4,5,6 插入的是这整体1,2,3,4,5,6
在指定位置插入数据
linsert a4 before 3 99 在数值3 之前插入99
linsert a4 after 5 199 在5后面插入199
如果有多个值的话,插入到第一个找到的数字之前或之后
tips:插入数据时出现报错信息 不能持久化到硬盘 用来修改数据的命令是不能用的
解决办法:
运行 config set stop-writes-on-bgsave-error no
在redis.windows.conf 文件231行stop-writes-on-bsave-error 由yes改为no
修改数据
修改指定index对应的值
lset key index value/ lset a5 0 -1 把a5中的下标为0的数据修改为-1
删除
lrem key count value
count = 0 代表移除所有的值
如果 count >0 就是从头到尾删除几个
count <0 从尾到头删除几个
不能指定删除某个index对应的数据
5、redis的hash类型
hash用于存储对象 对象结构为属性,值
值的类型为string
增加、修改
设置单个属性
hset key field value
hkeys key 查看键下面的属性
hget key field 查看属性对应的值
设置多个属性
hmset key field value [field value …]
hset us2 hobby game 有这个值就是修改、没有就是添加
获取多个属性值
hmget key field [field …] / hmget us2 name age hobby
获取所有属性的值:hvals key /hvals user
删除
删除这个hash键、值 使用的del :del key
删除属性 属性对应的值也会被一起删除: hdel key field [field …]
6、set无序集合
元素类型为string、元素不重复
增加
sadd key member [member …]
sadd u1 zhangsan lisi wangwu zhangsan
获取
返回所有的元素:smembers key / smembers u1
删除
del:
删除指定元素:srem key member [member …] /srem u1 wangwu
随机弹出几个数据:spop key [count] / spop u2 2 随机弹出u2里两个数据
查询
判段集合元素是否存在 1表示在 0表示不
移动
smove u1 u2 zhangsan // smove source destination member
把u1 里的张三 移动到 u2
7、zset 有序集合
有序集合、元素类型为string、元素不重复、每个元素都会关联一个double类型的score,表示权重、通过权重将元素从小到大排列
增加
zadd key [NX|XX] [CH] [INCR] score member [score member ..
zadd u3 4 lisi 5 wangwu 6 zhouliu 3 zhangsan
向u3 集合里添加元素 权重 按照权重排序
获取
返回指定范围内的元素
zrange u3 0 -1
zrange key start stop [WITHSCORES]
返回score值在最小值min-最大值max之间的成员
zrangebyscore key min max
zrangebyscore u3 3 5
返回某个成员的权重值
zscore u3 wangwu
zscore key member
删除
zrem key member // zrem u3 zhangsan 删除某个元素
zremrangebyscore key min max 删除指定范围的元素
5、python与redis交互
默认redis有16个数据库
select index 切换数据库 0-15
6、代理ip
快代理去找代理ip
在scrapy中间件里单独设置一个中间件,携带代理ip,并在settings中开启
