分布式爬虫爬取知乎用户—redis篇
使用redis作为缓存存储爬取下来的关注用户列表,使用redis set集合还有一个好处是可以自动去重。
我打算用五个集合,分别是waiting_set(等待爬取)、success_info(信息爬取成功)、failed_info(信息爬取失败)、success_list(关注列表爬取成功)、failed_list(关注列表爬取失败)、
首先需要用python连接redis(连接前需将redis服务开启)
import redis
r = redis.Redis('localhost','6379','db0')
然后可以使用r.sadd('key','value')将urlToken添加到set集合中
使用s.spop('key')可以从集合中随机取出一个urlToken,爬取其用户信息,如果成功将其放入success_info集合,将用户信息存入mongdb数据库,否则放入failed_info
使用另外一个进程爬取其关注者列表,如果成功放入success_list集合否则放入failed_list集合。
注意:
redis默认开启保护模式,连接redis 时只能通过本地localhost (127.0.0.1)这个来链接,而不能用网络ip(192.168..)这个链接,如果用网络ip 链接会报以下错误。
"DENIED Redis is running in protected mode"
解决方法如下:
修改配置文件 redis.conf。
1. 打开配置文件把下面对应的注释掉
# bind 127.0.0.1
2. 关闭保护模式
protected-mode no
3. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,设置为no
daemonize no
然后使用配置文件启动redis即可成功远程访问
$ redis-server redis.conf
参考文章: python操纵redis set集合