pythonrequests爬取知乎个人信息数据

43次阅读

共计 954 个字符,预计需要花费 3 分钟才能阅读完成。

效果

预览地址:http://23.105.208.123/

技术栈

  • python3
  • requests
  • redis
  • echart

源码地址

https://github.com/MasakiOvO/…

python 需要安装的库

requests,BeautifulSoup,redis,django

思路

两个程序。

  1. 一个程序负责爬取用户关注和粉丝列表,并把用户名存入 set
  2. 另一个程序负责根据用户名获取详细信息,存入 hash

维护 两个列表 1. 已爬用户 2. 未爬用户
第一个程序的流程:

当未爬 set 不为空时:执行如下操作:每次从未爬取列表中取出一个用户名 
根据用户名,获取他的关注与粉丝并遍历,如果用户既没在已爬用户,也没在未爬用户 加入未爬用户列表。

第二个程序的流程

每次从未爬 set 中取出一个用户名,调用接口获取详细信息并存入 redis hash 中

接口获取


打开某个人的个人主页,按 F12

选择 XHR 然后点击图 1 的关注我的人,和我关注的人,在图 2 就可以看到 header 和 cookie。

获取用户列表 Api:

https://www.zhihu.com/api/v4/…{username}/{type}?include=data[*].answer_count,articles_count,gender,follower_count,is_followed,is_following,badge[?(type=best_answerer)].topics&offset=20&limit=20

username 是用户名,
type 是类型,有两种可选 [followers,followees],followers 是粉丝 followees 是关注
改变 offset 的值可以获取分页

获取个人信息 Api:

https://www.zhihu.com/people/…

user_token 是用户名
这个 api 中 返回的是 html 页面,在 html 页面中有一个 scirpt 标签里面的内容是 json 格式的用户信息,这就很方便了,直接获取键值对 对应的属性就 ok。

发送请求

F12 查看接口,把 header 和 cookie 放进 requests.get()方法中。

剩下的就很简单了,不赘述了。

总结

还有很多优化的地方。比如加入中间件,来提升爬虫的稳定性。对数据进行分类,统计城市分布。

正文完
 0