-
克隆项目
git clone https://github.com/Annihilater/zhihuuser.git
-
安装依赖
pip install -r requirements.txt
-
本机启动 MongoDB 数据库
-
运行爬虫
scrapy crawl zhihu
- 选择起始人:大 V
- 获取它的粉丝和关注列表:通过知乎接口
- 获取用户信息列表:通过知乎接口获取列表中每位用户的详细信息
- 获取每位用户粉丝和关注列表:进一步获取列表中的每一位用户的详细信息,实现递归爬取
start_requests
方法- 获取用户信息
- 获取该用户的关注列表
- 获取该用户的粉丝列表
parse_user
方法- 解析用户的详细信息,返回
item
给Pipline
- 获取用户的关注列表,进行下一步递归调用
- 获取用户的粉丝列表,进行下一步递归调用
- 解析用户的详细信息,返回
parse_follows
方法- 解析关注列表或者粉丝列表,获取
url_token
,再通过url_token
获取用户详细信息,进行递归调用 - 对关注列表或者粉丝列表递归进行分页
- 解析关注列表或者粉丝列表,获取
使用 MongoDB 数据库进行用户信息存储,使用的是官方示例代码,唯一改动的是将数据插入操作改成了数据更新操作。
def process_item(self, item, spider):
self.db[self.collection_name].insert_one(dict(item))
return item
改成
def process_item(self, item, spider):
self.db[self.collection_name].update_one({'url_token': item['url_token']}, {'$set': item}, True)
return item
使用 update_one
语句:
先去数据库中依据 url_token
查找 item
,如果找到了则更新 item
,如果找不到,则插入 item
update_one(filter, update, upsert=False, bypass_document_validation=False, collation=None, array_filters=None, session=None)
参数解释:
filter
:查询条件,{'url_token': item['url_token']}
依据 url_token
查询
update
:插入信息,{'$set': item}
upsert
:如果没有查询到数据,是否执行插入操作