用 Python 分析你的关注者情况(上)


(hbworld) #1

首发于我的 博客

使用 @秦渊 大神的 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 知乎 - 与世界分享你的知识、经验和见解), 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)

![](data:image/svg+xml;utf8,<svg%20xmlns=‘http://www.w3.org/2000/svg’%20width=‘1364’%20height='816’>)

这就就根据之前拉取的关注者的个性域名,再去拉取并打印关注者的基本信息。这里每拉取一位关注者的信息,就打印出来——每拉取一份数据目测大概需要一秒左右,所以纯粹是弥补视觉上的空档。

将关注者的基本信息保存为 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 这两条改成自己的就行了。

源码地址:ipreacher/tricks/zhihu/

还是挺好玩的,下一篇再写数据分析。