使用 秦渊 大神的 zhihu API 来分析指定知乎用户的关注者情况,或者说这篇是 zhihu API 的伪使用教程。这篇的代码也收录在 tricks 中,感兴趣的同学可以来点个 star 。
zhihu API 是有回我搜爬虫教程的时候看到的,对我这样一个完全不会爬虫的家伙来说,真是帮了大忙。star 之后一直也没怎么用过,刚好前几天被一个“三零号”喷,于是就顺便看了下自己的 800 多个关注者,写了个小脚本来分析一下。
脚本逻辑整个脚本的逻辑很简单:先用 zhihu API 抓取我的关注者列表,根据这份名单去抓取关注者的具体信息,然后保存为 txt 文件,最后根据数据来做分析。而这一篇,就先说到获取数据并保存。
配置 cookie __author__ = 'ipreacher' import zhihuapi as api with open('cookie') as f: api.cookie(f.read())这里在第一次使用的时候,要先配置 cookie,具体的配置方式看 文档 的 Quich Start 。
Note that you must set cookie before sending any HTTP request. In order to set cookie correctly, you should:
Sign in with your zhihu account. Open Chrome DevTools (or substitutes with other browsers) and navigate to Network panel. Select a valid request (a request with host be www.zhihu.com), and copy its Cookie value in Request Headers. DONOT use document.cookie since some cookie values are httponly. 拉取关注者的昵称和个性域名 r1 = [] r2 = [] r5 = [] # 拉取关注者的昵称和个性域名,page 根据自己关注者页数确定 def followers(me, page): for i in range(page): data = api.user(me).followers(offset=(20 * i)) for j in range(len(data)): r1.append(data[j]['name']) # 关注者的昵称 r2.append(data[j]['url_token']) # 关注者的个性域名随后是拉取关注者的昵称和个性域名,接口每次只能获取 20 个,秦渊大神说“尝试的结果是一次最多可以拿到30个用户”。不过一次获取 20 个的话,刚好就是每一页的关注者人数,所以只要数一下自己有多少页关注者就行了。
分行打印关注者的昵称和个性域名 # 分行打印关注者的昵称和个性域名 def show(r): for k in range(len(r1)): s = (r[k] + '\n') print(s)这个就不用多说了,只是为了一个直观的展现。
拉取并打印关注者的基本信息 # 拉取并打印关注者的基本信息,包括序号及其个性域名、昵称、赞同数、感谢数、关注人数 def ff(): for i in range(len(r2)): r3 = api.user(r2[i]).detail() r4 = [i, r3['urlToken'], r3['name'], r3['voteupCount'], r3['thankedCount'], r3['followerCount']] r5.append(r4) print(r4) #print(r5)
这就就根据之前拉取的关注者的个性域名,再去拉取并打印关注者的基本信息。这里每拉取一位关注者的信息,就打印出来――每拉取一份数据目测大概需要一秒左右,所以纯粹是弥补视觉上的空档。
将关注者的基本信息保存为 txt 文件 # 将关注者的基本信息保存为 txt 文件 def txt(r): f = open('r.txt','w') f.write(str(r)) f.close()这是为了之后方便分析数据,txt 格式也单纯是顺手这么写了而已,大家也可以换成其他格式。
脚本的使用 if __name__ == '__main__': me = 'ipreacher' page = 41 followers(me, page) #show(r1) #show(r2) ff() txt(r5)这个脚本可以直接用,只需要把最后的 me 和 page 这两条改成自己的就行了。
还是挺好玩的,下一篇再写数据分析。