Welcome to zhihu-py3’s documentation!

Contents:

安装和测试

pip安装(推荐)

(sudo) pip(3) install (--upgrade) zhihu-py3

如果想同时安装lxml,获得更快的解析速度、容错率和美观程度,请开启lxml feature:

(sudo) pip(3) install (--upgrade) zhihu-py3[lxml]

源码安装

依赖于beautifulsoup4、requests、html2text,会自动安装。

git clone https://github.com/7sDream/zhihu-py3.git
cd zhihu-py3
python(3) setup.py install

测试

若是使用源码安装,则安装完成后可以进行一下测试

cd test
python(3) zhihu-test.py

用法示例

获取某用户的基本信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from zhihu import ZhihuClient

Cookies_File = 'cookies.json'

client = ZhihuClient(Cookies_File)

url = 'http://www.zhihu.com/people/excited-vczh'
author = client.author(url)

print('用户名 %s' % author.name)
print('用户简介 %s' % author.motto)
print('用户关注人数 %d' % author.followee_num)
print('取用户粉丝数 %d' % author.follower_num)
print('用户得到赞同数 %d' % author.upvote_num)
print('用户得到感谢数 %d' % author.thank_num)
print('用户提问数 %d' % author.question_num)
print('用户答题数 %d' % author.answer_num)

print('用户专栏文章数 %d,名称分别为:' % author.post_num)
for column in author.columns:
  print(column.name)
print('用户收藏夹数 %d,名称分别为:' % author.collection_num)
for collection in author.collections:
  print(collection.name)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
用户名 vczh
用户简介 专业造轮子 https://github.com/vczh-libraries
用户关注人数 1339
取用户粉丝数 128100
用户得到赞同数 320326
用户得到感谢数 43045
用户提问数 238
用户答题数 8392
用户专栏文章数 25,名称分别为:
vczh的日常
深井冰 IT 评论
编程语言与高级语言虚拟机杂谈(仮)
蓝色小药丸
用户收藏夹数 1,名称分别为:
李老师牛逼的答案

备份某问题所有答案

1
2
3
question = client.question('http://www.zhihu.com/question/28092572')
for answer in question.answers:
   answer.save()

会在当前目录下新建以问题标题命名的文件夹,并将所有html文件保存到该文件夹。

answer.save(mode="md")

会保存为markdown格式。

备份某用户所有答案

1
2
3
author = client.author('http://www.zhihu.com/people/7sdream')
for answer in author.answers:
   answer.save(filepath=author.name)

备份某收藏夹所有答案,备份专栏文章同理,不再举例。

获取某用户点赞的动态

1
2
3
4
5
6
7
8
author = zhihu.author('http://www.zhihu.com/people/excited-vczh')
for act in author.activities:
   if act.type == zhihu.ActType.UPVOTE_ANSWER:
       print('%s%s 赞同了问题 %s%s(motto: %s) 的回答, '
             '此回答赞同数 %d' %
             (author.name, act.time, act.answer.question.title,
              act.answer.author.name, act.answer.author.motto,
              act.answer.upvote_num))
vczh 在 2015-07-24 08:35:06 赞同了问题 女生夏天穿超短裙是一种什么样的体验? 中 Light(motto: 我城故事多。) 的回答, 此回答赞同数 43
vczh 在 2015-07-24 08:34:30 赞同了问题 女生夏天穿超短裙是一种什么样的体验? 中 Ms狐狸(motto: 随便写来玩玩) 的回答, 此回答赞同数 57
……

获取用户关注的人和关注此用户的人

1
2
3
4
5
6
7
8
9
author = client.author('http://www.zhihu.com/people/7sdream')

print('--- Followers ---')
for follower in author.followers:
   print(follower.name)

print('--- Followees ---')
for followee in author.followees:
   print(followee.name)
--- Followers ---
yuwei
falling
周非
...
--- Followees ---
yuwei
falling
伍声
...

计算某答案点赞中三零用户比例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
url = 'http://www.zhihu.com/question/30404450/answer/47939822'
answer = client.answer(url)

three_zero_user_num = 0

for upvoter in answer.upvoters:
   print(upvoter.name, upvoter.upvote_num, upvoter.thank_num,
         upvoter.question_num, upvoter.answer_num)
   if upvoter.is_zero_user():
       three_zero_user_num += 1

print('\n三零用户比例 %.3f%%' % (three_zero_user_num / answer.upvote_num * 100))
...
宋飞 0 0 0 0
唐吃藕 10 0 0 5

三零用户比例 26.852%

爬取某用户关注的人的头像

import requests
import os
import imghdr

author = client.author('http://www.zhihu.com/people/excited-vczh')

os.mkdir('vczh')
for followee in author.followees:
   try:
       filename = followee.name + ' - ' + followee.id + '.jpeg'
       print(filename)
       with open('vczh/' + filename, 'wb') as f:
           f.write(requests.get(followee.photo_url).content)
   except KeyboardInterrupt:
       break

for root, dirs, files in os.walk('vczh'):
   for filename in files:
       filename = os.path.join(root, filename)
       img_type = imghdr.what(filename)
       if img_type != 'jpeg' and img_type is not None:
           print(filename, '--->', img_type)
           os.rename(filename, filename[:-4] + img_type)

效果见 这里

使用非阻塞的网络请求

内建的所有请求都是阻塞的, 如果你希望使用其他的网络请求方法, 你可以把请求到的数据传入相关类的 from_html 方法中. from_html 方法用于接受数据, 返回相应的类的实例.

这里以使用 aiohttp 为例, 使用的是 python3.5 之后引入的语法. 无需置疑, 你要自己处理 session

比如要获取一个答案.

import aiohttp
import asyncio
import zhihu


async def get_answer(url, cookies, headers):
    async with aiohttp.get(url, cookies=cookies, headers=headers) as r:
        data = await r.text()

    # from_html 是 classmethod
    answer = zhihu.Answer.from_html(data)

    print(answer.content)

url = 'answer url'
cookies = dict(client._session.cookies)
headers = client._session.headers

loop = asyncio.get_event_loop()
loop.run_until_complete(get_answer(url, cookies, headers))

登录方法综述:

create_cookies

用于生成 cookies,用法见前面的介绍。

login_with_cookies

用cookies字符串或文件名登录,ZhihuClient的构造函数就是使用这个方法。

get_captcha

获取验证码数据(bytes二进制数据),当用于其他项目时方便手动获取验证码图片数据进行处理,比如显示在控件内。

login

手动登陆方法,用于其他项目中方便手动无需 cookies 登陆,参数为:

  • email
  • password
  • captcha

返回值有三个

  • code:成功为0,失败为1
  • msg:错误消息,字符串格式,成功为空
  • cookies:cookies数据,字符串格式,失败为空

login_in_terminal

跟着提示在终端里登录知乎,返回cookies字符串,create_cookies就是帮你做了将这个函数的返回值保存下来的工作而已。

综上

如果你只是写个小脚本测试玩玩,可以使用:

from zhihu import ZhihuClient
client = ZhihuClient()
client.login_in_terminal()

# do thing you want with client

如果你的脚本不是大项目,又要多次运行,可以先按照上文方法create_cookies,再使用:

from zhihu import ZhihuClient
Cookies_File = 'cookies.json'
client = ZhihuClient(Cookies_File)

如果项目比较大(以GUI项目为例),可以在判断出是首次使用(没有cookies文件)时,弹出登录对话框,使用get_captcha获取验证码数据,再调用login函数手动登录并在登录成功后保存cookies文件:

import os
from zhihu import ZhihuClient

Cookies_File = 'config/cookies.json'

client = ZhihuClient()

def on_window_show()
    login_btn.disable()
    if os.path.isfile(Cookies_File) is False:
        captcha_imgbox.setData(client.get_captcha())
        login_btn.enable()
    else:
        with open(Cookies_File) as f
            client.login_with_cookies(f.read())
        # turn to main window

def on_login_button_clicked():
    login_btn.disable()
    email = email_edit.get_text()
    password = password_edit.get_text()
    captcha = captcha_edit.get_text()
    code, msg, cookies = client.login(email, password, captcha)
    if code == 0:
        with open(Cookies_File, 'w') as f
            f.write(cookies)
        # turn to main window
    else:
        msgbox(msg)
        login_btn.enable()

注:以上和GUI有关的代码皆为我乱想出来的,仅作示例之用。

知乎相关类文档

ZhihuClient 知乎客户端类

class zhihu.client.ZhihuClient(cookies=None)[源代码]

知乎客户端类,内部维护了自己专用的网络会话,可用cookies或账号密码登录.

__getattr__(item: str)[源代码]

本函数用于获取各种类,如 Answer Question 等.

支持的形式有:
  1. client.answer()
  2. client.author()
  3. client.collection()
  4. client.column()
  5. client.post()
  6. client.question()
  7. client.topic()

参数均为对应页面的url,返回对应的类的实例。

__init__(cookies=None)[源代码]

创建客户端类实例.

参数:cookies (str) – 见 login_with_cookies()cookies 参数
返回:知乎客户端对象
返回类型:ZhihuClient
create_cookies(file, need_captcha=False, use_getpass=True)[源代码]

在终端中执行登录流程,将 cookies 存放在文件中以便后续使用

参数:
  • file (str) – 文件名
  • need_captcha (bool) – 登录过程中是否使用验证码, 默认为 False
  • use_getpass (bool) – 是否使用安全模式输入密码,默认为 True, 如果在某些 Windows IDE 中无法正常输入密码,请把此参数设置为 False 试试
返回:

get_captcha()[源代码]

获取验证码数据。

返回:验证码图片数据。
返回类型:bytes
login(email, password, captcha=None)[源代码]

登陆知乎.

参数:
  • email (str) – 邮箱
  • password (str) – 密码
  • captcha (str) – 验证码, 默认为None,表示不提交验证码
返回:

元素序号 元素类型 意义 说明
0 int 是否成功 0为成功,1为失败
1 str 失败原因 登录成功则为空字符串
2 str cookies字符串 登录失败则为空字符串

返回类型:

(int, str, str)

login_in_terminal(need_captcha=False, use_getpass=True)[源代码]

不使用cookies,在终端中根据提示登陆知乎

参数:
  • need_captcha (bool) – 是否要求输入验证码,如果登录失败请设为 True
  • use_getpass (bool) – 是否使用安全模式输入密码,默认为 True, 如果在某些 Windows IDE 中无法正常输入密码,请把此参数设置为 False 试试
返回:

如果成功返回cookies字符串

返回类型:

str

login_with_cookies(cookies)[源代码]

使用cookies文件或字符串登录知乎

参数:cookies (str) –
参数形式 作用
文件名 将文件内容作为cookies字符串
cookies 字符串 直接提供cookies字符串
返回:
返回类型:None
me()[源代码]

获取使用特定 cookies 的 Me 实例

返回:cookies对应的Me对象
返回类型:Me
remove_proxy_pool()[源代码]

移除代理池

set_proxy(proxy)[源代码]

设置代理

参数:proxy (str) – 使用 “http://example.com:port” 的形式
返回:
返回类型:None
说明:由于一个 ZhihuClient 对象和它创建出来的其他知乎对象共用 一个Session,所以调用这个方法也会将所有生成出的知乎类设置上代理。
set_proxy_pool(proxies, auth=None, https=True)[源代码]

设置代理池

参数:
  • proxies – proxy列表, 形如 ["ip1:port1", "ip2:port2"]
  • auth – 如果代理需要验证身份, 通过这个参数提供, 比如
  • https – 默认为 True, 传入 False 则不设置 https 代理
from requests.auth import HTTPProxyAuth
auth = HTTPProxyAuth('laike9m', '123')
说明:每次 GET/POST 请求会随机选择列表中的代理

Activity and ActType 用户动态类

class zhihu.activity.Activity(act, session, author)[源代码]

用户动态类,请使用Author.activities获取.

__init__(act, session, author)[源代码]

创建用户动态类实例.

参数:
  • act (bs4.element.Tag) – 表示用户动态的页面元素
  • session (Session) – 使用的网络会话
  • author (Author) – Activity 所属的用户对象
返回:

用户动态对象

返回类型:

Activity

说明:

根据Activity.type不同可以获取不同属性,具体请看 ActType

content

获取此对象中能提供的那个属性,对应表请查看 ActType 类.

返回:对象提供的对象
返回类型:Author or Question or Answer or Topic or Column or Post
time
返回:返回用户执行 Activity 操作的时间
返回类型:datetime.datetime
type
返回:用户动态类型, 具体参见 ActType
返回类型:class:.ActType
class zhihu.acttype.ActType[源代码]

用于表示用户动态的类型.

常量说明:
常量名 说明 提供属性 属性类型
ANSWER_QUESTION 回答了一个问题 answer Answer
UPVOTE_ANSWER 赞同了一个回答 answer Answer
ASK_QUESTION 提出了一个问题 question Question
FOLLOW_QUESTION 关注了一个问题 question Question
UPVOTE_POST 赞同了一篇文章 post Post
FOLLOW_COLUMN 关注了一个专栏 column Column
FOLLOW_TOPIC 关注了一个话题 topic Topic
PUBLISH_POST 发表了一篇文章 post Post
FOLLOW_COLLECTION 关注了一个收藏夹 collection Collection

Answer 答案类

class zhihu.answer.Answer(url, question=None, author=None, upvote_num=None, content=None, session=None)[源代码]

答案类,请使用``ZhihuClient.answer``方法构造对象.

__init__(url, question=None, author=None, upvote_num=None, content=None, session=None)[源代码]

创建答案类实例.

参数:
  • url (str) – 答案url
  • question (Question) – 答案所在的问题对象,可选
  • author (Author) – 答案回答者对象,可选
  • upvote_num (int) – 答案赞同数量,可选
  • content (str) – 答案内容,可选
  • session (Session) – 使用的网络会话,为空则使用新会话
返回:

答案对象

返回类型:

Answer

aid

获取答案的内部id,某些POST操作需要此参数

返回:答案内部id
返回类型:str
author

获取答案作者.

返回:答案作者
返回类型:Author
collect_num

获取答案收藏数

返回:答案收藏数量
返回类型:int
collections

获取包含该答案的收藏夹

返回:包含该答案的收藏夹
返回类型:Collection.Iterable

collect_num 未必等于 len(collections),比如: https://www.zhihu.com/question/20064699/answer/13855720 显示被收藏 38 次,但只有 30 个收藏夹

comment_num
返回:答案下评论的数量
返回类型:int
comments

获取答案下的所有评论.

返回:答案下的所有评论,返回生成器
返回类型:Comments.Iterable
content

以处理过的Html代码形式返回答案内容.

返回:答案内容
返回类型:str
creation_time

获取答案创建时间

返回:答案创建时间
返回类型:datetime.datetime
deleted

答案是否被删除, 被删除了返回 True, 为被删除返回 False :return: True or False

html

获取网页源码

返回:网页源码
返回类型:str
id

答案的id

返回:答案id
返回类型:int
latest_comments

获取答案下的所有评论。较新的评论先返回。 使用该方法比 reversed(list(answer.comments)) 效率高 因为现在靠后的热门评论会被挪到前面,所以返回的评论未必严格满足时间先后关系

返回:答案下的所有评论,返回生成器
返回类型:Comments.Iterable
question

获取答案所在问题.

返回:答案所在问题
返回类型:Question
refresh()[源代码]

刷新 Answer object 的属性. 例如赞同数增加了, 先调用 refresh() 再访问 upvote_num属性, 可获得更新后的赞同数.

返回:None
save(filepath=None, filename=None, mode='html')[源代码]

保存答案为Html文档或markdown文档.

参数:
  • filepath (str) – 要保存的文件所在的目录, 不填为当前目录下以问题标题命名的目录, 设为”.”则为当前目录。
  • filename (str) – 要保存的文件名, 不填则默认为 所在问题标题 - 答主名.html/md。 如果文件已存在,自动在后面加上数字区分。 自定义文件名时请不要输入后缀 .html 或 .md。
  • mode (str) – 保存类型,可选 htmlmarkdownmd
返回:

返回类型:

None

upvote_num

获取答案赞同数量.

返回:答案赞同数量
返回类型:int
upvoters

获取答案点赞用户,返回生成器.

返回:点赞用户
返回类型:Author.Iterable
xsrf

获取知乎的反xsrf参数(用不到就忽视吧~)

返回:xsrf参数
返回类型:str

Author 用户类

class zhihu.author.Author(url, name=None, motto=None, follower_num=None, question_num=None, answer_num=None, upvote_num=None, thank_num=None, photo_url=None, session=None)[源代码]

用户类,请使用``ZhihuClient.answer``方法构造对象.

__init__(url, name=None, motto=None, follower_num=None, question_num=None, answer_num=None, upvote_num=None, thank_num=None, photo_url=None, session=None)[源代码]

创建用户类实例.

参数:
  • url (str) – 用户主页url,形如 http://www.zhihu.com/people/7sdream
  • name (str) – 用户名字,可选
  • motto (str) – 用户简介,可选
  • follower_num (int) – 用户粉丝数,可选
  • question_num (int) – 用户提问数,可选
  • answer_num (int) – 用户答案数,可选
  • upvote_num (int) – 用户获得赞同数,可选
  • thank_num (int) – 用户获得感谢数,可选
  • photo_url (str) – 用户头像地址,可选
  • session (Session) – 使用的网络会话,为空则使用新会话。
返回:

用户对象

返回类型:

Author

activities

获取用户的最近动态.

返回:最近动态,返回生成器,具体说明见 Activity
返回类型:Activity.Iterable
answer_num

获取答案数量.

返回:答案数量
返回类型:int
answers

获取用户的所有答案.

返回:用户所有答案,返回生成器.
返回类型:Answer.Iterable
business

用户的行业.

返回:用户的行业,如没有则返回 ‘unknown’
返回类型:str
collection_num

获取收藏夹数量.

返回:收藏夹数量
返回类型:int
collections

获取用户收藏夹.

返回:用户收藏夹,返回生成器
返回类型:Collection.Iterable
columns

获取用户专栏.

返回:用户专栏,返回生成器
返回类型:Column.Iterable
education

用户的教育状况.

返回:用户的教育状况,如没有则返回 ‘unknown’
返回类型:str
followed_column_num

获取用户关注的专栏数

返回:关注的专栏数
返回类型:int
followed_columns

获取用户关注的专栏.

返回:用户关注的专栏,返回生成器
返回类型:Column.Iterable
followed_topic_num

获取用户关注的话题数

返回:关注的话题数
返回类型:int
followed_topics

获取用户关注的话题.

返回:用户关注的话题,返回生成器
返回类型:Topic.Iterable
followee_num

获取关注了多少人.

返回:关注的人数
返回类型:int
followees

获取用户关注的人.

返回:用户关注的人的,返回生成器
返回类型:Author.Iterable
followees_skip(skip)[源代码]

获取用户关注的人,跳过前 skip 个用户。

返回:用户关注的人的,返回生成器
返回类型:Author.Iterable
follower_num

获取追随者数量,就是关注此人的人数.

返回:追随者数量
返回类型:int
followers

获取关注此用户的人.

返回:关注此用户的人,返回生成器
返回类型:Author.Iterable
followers_skip(skip)[源代码]

获取关注此用户的人,跳过前 skip 个用户。

返回:关注此用户的人,返回生成器
返回类型:Author.Iterable
gender

用户的性别.

返回:用户的性别(male/female/unknown)
返回类型:str
hash_id

获取作者的内部hash id(用不到就忽视吧~)

返回:用户hash id
返回类型:str
id

获取用户id,就是网址最后那一部分.

返回:用户id
返回类型:str
is_zero_user()[源代码]

返回当前用户是否为三零用户,其实是四零: 赞同0,感谢0,提问0,回答0.

返回:是否是三零用户
返回类型:bool
last_activity_time

获取用户最后一次活动的时间

返回:用户最后一次活动的时间,返回值为 unix 时间戳
返回类型:int
location

用户的所在地.

返回:用户的所在地,如没有则返回 ‘unknown’
返回类型:str
motto

获取用户自我介绍,由于历史原因,我还是把这个属性叫做motto吧.

返回:用户自我介绍
返回类型:str
name

获取用户名字.

返回:用户名字
返回类型:str
photo_url

获取用户头像图片地址.

返回:用户头像url
返回类型:str
post_num

获取专栏文章数量.

返回:专栏文章数量
返回类型:int
question_num

获取提问数量.

返回:提问数量
返回类型:int
questions

获取用户的所有问题.

返回:用户的所有问题,返回生成器.
返回类型:Question.Iterable
thank_num

获取收到的感谢数量.

返回:收到的感谢数量
返回类型:int
upvote_num

获取收到的的赞同数量.

返回:收到的的赞同数量
返回类型:int
weibo_url

获取用户微博链接.

返回:微博链接地址,如没有则返回 ‘unknown’
返回类型:str
xsrf

获取知乎的反xsrf参数(用不到就忽视吧~)

返回:xsrf参数
返回类型:str
zhihu.author.ANONYMOUS

匿名用户常量,通过 zhihu.ANONYMOUS 访问。

提问者、回答者、点赞者、问题关注者、评论者都可能是 ANONYMOUS

Collection 收藏夹类

class zhihu.collection.Collection(url, owner=None, name=None, follower_num=None, session=None)[源代码]

收藏夹,请使用``ZhihuClient.collection``方法构造对象.

__init__(url, owner=None, name=None, follower_num=None, session=None)[源代码]

创建收藏夹类实例.

参数:
  • url (str) – 收藏夹主页url,必须
  • owner (Author) – 收藏夹拥有者,可选
  • name (str) – 收藏夹标题,可选
  • follower_num (int) – 收藏夹关注人数,可选
  • session (Session) – 使用的网络会话,为空则使用新会话。
返回:

收藏夹对象

返回类型:

Collection

answers

获取收藏夹内所有答案对象.

返回:收藏夹内所有答案,返回生成器
返回类型:Answer.Iterable
cid

获取收藏夹内部Id(用不到忽视就好)

返回:内部Id
返回类型:int
follower_num

获取关注此收藏夹的人数.

返回:关注此收藏夹的人数
返回类型:int
followers

获取关注此收藏夹的用户

返回:关注此收藏夹的用户
返回类型:Author.Iterable
id

获取收藏夹id(网址最后的部分).

返回:收藏夹id
返回类型:int
logs

获取收藏夹日志

返回:收藏夹日志中的操作,返回生成器
返回类型:CollectActivity.Iterable
name

获取收藏夹名字.

返回:收藏夹名字
返回类型:str
owner

获取收藏夹拥有者,返回Author对象.

返回:收藏夹拥有者
返回类型:Author
questions

获取收藏夹内所有问题对象.

返回:收藏夹内所有问题,返回生成器
返回类型:Question.Iterable
xsrf

获取知乎的反xsrf参数(用不到就忽视吧~)

返回:xsrf参数
返回类型:str
class zhihu.collection.CollectActivity(type, time, owner, collection, answer=None)[源代码]

收藏夹操作, 请使用``Collection.logs``构造对象.

__init__(type, time, owner, collection, answer=None)[源代码]

创建收藏夹操作类实例

参数:
  • type (acttype.CollectActType) – 操作类型
  • time (datetime.datetime) – 进行操作的时间
  • owner (Author) – 收藏夹的拥有者
  • collection (Collection) – 所属收藏夹
  • answer (Answer) – 收藏的答案,可选
返回:

CollectActivity

answer
返回:添加或删除收藏的答案, 若是创建收藏夹操作返回 None
返回类型:Answer or None
collection
返回:所属收藏夹
返回类型:Collection
owner
返回:收藏夹的拥有者
返回类型:Author
time
返回:进行操作的时间
返回类型:datetime.datetime
type
返回:收藏夹操作类型, 具体参见 CollectActType
返回类型:CollectActType
class zhihu.acttype.CollectActType[源代码]

用于表示收藏夹操作的类型.

常量说明:
常量名 说明
INSERT_ANSWER 在收藏夹中增加一个回答
DELETE_ANSWER 在收藏夹中删除一个回答
CREATE_COLLECTION 创建收藏夹

Columu 专栏类

class zhihu.column.Column(url, name=None, follower_num=None, post_num=None, session=None)[源代码]

专栏类,请使用``ZhihuClient.column``方法构造对象.

__init__(url, name=None, follower_num=None, post_num=None, session=None)[源代码]

创建专栏类实例.

参数:
  • url (str) – 专栏url
  • name (str) – 专栏名,可选
  • follower_num (int) – 关注者数量,可选
  • post_num (int) – 文章数量,可选
  • session (Session) – 使用的网络会话,为空则使用新会话。
返回:

专栏对象

返回类型:

Column

follower_num

获取关注人数.

返回:关注人数
返回类型:int
name

获取专栏名称.

返回:专栏名称
返回类型:str
post_num

获取专栏文章数.

返回:专栏文章数
返回类型:int
posts

获取专栏的所有文章.

返回:专栏所有文章,返回生成器
返回类型:Post.Iterable

Comment 评论类

class zhihu.comment.Comment(cid, answer, author, upvote_num, content, time, group_id=None)[源代码]

评论类,一般不直接使用,而是作为``Answer.comments``迭代器的返回类型.

__init__(cid, answer, author, upvote_num, content, time, group_id=None)[源代码]

创建评论类实例.

参数:
  • cid (int) – 评论ID
  • group_id (int) – 评论所在的组ID
  • answer (Answer) – 评论所在的答案对象
  • author (Author) – 评论的作者对象
  • upvote_num (int) – 评论赞同数量
  • content (str) – 评论内容
  • creation_time (datetime.datetime) – 评论发表时间
返回:

评论对象

返回类型:

Comment

Me 用户操作类

敬告:本类提供的点赞,反对功能,请在使用前三思,并且绝对不要用于批量点赞,批量反对等不甚道德的脚本。和谐知乎,你我共建,谢谢理解。

class zhihu.me.Me(url, name, motto, photo_url, session)[源代码]

封装了相关操作(如点赞,关注问题)的类。 请使用 ZhihuClient.me() 方法获取实例。

add_comment(answer, content)[源代码]

给指定答案添加评论

参数:
  • answer (Answer) – 答案对象
  • content (string) – 评论内容
返回:

成功返回 True,失败返回 False

返回类型:

bool

block(something, block=True)[源代码]

屏蔽某个用户、话题

参数:
  • something (Author/Topic) –
  • block – True–>屏蔽,False–>取消屏蔽
返回:

成功返回 True,失败返回 False

返回类型:

bool

follow(something, follow=True)[源代码]

关注用户、问题、话题或收藏夹

参数:
  • something (Author/Question/Topic) – 需要关注的对象
  • follow (bool) – True–>关注,False–>取消关注
返回:

成功返回True,失败返回False

返回类型:

bool

send_message(author, content)[源代码]

发送私信给一个用户

参数:
  • author (Author) – 接收私信用户对象
  • content (string) – 发送给用户的私信内容
返回:

成功返回 True,失败返回 False

返回类型:

bool

thanks(answer, thanks=True)[源代码]

感谢或取消感谢回答

参数:
  • answer (Answer) – 要感谢或取消感谢的回答
  • thanks – True–>感谢,False–>取消感谢
返回:

成功返回True,失败返回False

返回类型:

bool

unhelpful(answer, unhelpful=True)[源代码]

没有帮助或取消没有帮助回答

参数:
  • answer (Answer) – 要没有帮助或取消没有帮助回答
  • unhelpful – True–>没有帮助,False–>取消没有帮助
返回:

成功返回 True,失败返回 False

返回类型:

bool

vote(something, vote='up')[源代码]

给答案或文章点赞或取消点赞

参数:
  • something (Answer/Post) – 需要点赞的答案或文章对象
  • vote (str) –
    取值 说明 默认值
    up 赞同
    down 反对 X
    clear 既不赞同也不反对 X
返回:

成功返回True,失败返回False

返回类型:

bool

Post 专栏文章类

class zhihu.post.Post(url, column=None, author=None, title=None, upvote_num=None, comment_num=None, session=None)[源代码]

专栏文章类,请使用``ZhihuClient.post``方法构造对象.

__init__(url, column=None, author=None, title=None, upvote_num=None, comment_num=None, session=None)[源代码]

创建专栏文章类实例.

参数:
  • url (str) – 文章url
  • column (Column) – 文章所属专栏,可选
  • author (Author) – 文章作者,可选
  • title (str) – 文章标题,可选
  • upvote_num (int) – 文章赞同数,可选
  • comment_num (int) – 文章评论数,可选
  • session (Session) – 使用的网络会话,为空则使用新会话
返回:

专栏文章对象

返回类型:

Post

author

获取文章作者.

返回:文章作者
返回类型:Author
column

获取文章所在专栏.

返回:文章所在专栏
返回类型:Column
column_in_name

获取文章所在专栏的内部名称(用不到就忽视吧~)

返回:专栏的内部名称
返回类型:str
comment_num

获取评论数量.

返回:评论数量
返回类型:int
save(filepath=None, filename=None, mode='md')[源代码]

保存答案为 Html 文档或 markdown 文档.

参数:
  • filepath (str) – 要保存的文件所在的目录, 不填为当前目录下以专栏标题命名的目录, 设为”.”则为当前目录。
  • filename (str) – 要保存的文件名, 不填则默认为 所在文章标题 - 作者名.html/md。 如果文件已存在,自动在后面加上数字区分。 自定义文件名时请不要输入后缀 .html 或 .md。
  • mode (str) – 保存类型,可选 htmlmarkdownmd
返回:

返回类型:

None

slug

获取文章的编号(用不到就忽视吧~)

返回:文章编号
返回类型:int
title

获取文章标题.

返回:文章标题
返回类型:str
upvote_num

获取文章赞同数量.

返回:文章赞同数
返回类型:int
upvoters

获取文章的点赞用户

返回:文章的点赞用户,返回生成器。

Question 问题类

class zhihu.question.Question(url, title=None, followers_num=None, answer_num=None, creation_time=None, author=None, session=None)[源代码]

问题类,请使用``ZhihuClient.question``方法构造对象.

__init__(url, title=None, followers_num=None, answer_num=None, creation_time=None, author=None, session=None)[源代码]

创建问题类实例.

参数:
  • url (str) –

    问题url. 现在支持两种 url

    1. https://www.zhihu.com/question/qid
    2. https://www.zhihu.com/question/qid?sort=created

    区别在于,使用第一种,调用 question.answers 的时候会按投票排序返回答案; 使用第二种, 会按时间排序返回答案, 后提交的答案先返回

  • title (str) – 问题标题,可选,
  • followers_num (int) – 问题关注人数,可选
  • answer_num (int) – 问题答案数,可选
  • creation_time (datetime.datetime) – 问题创建时间,可选
  • author (Author) – 提问者,可选
返回:

问题对象

返回类型:

Question

answer_num

获取问题答案数量.

返回:问题答案数量
返回类型:int
answers

获取问题的所有答案.

返回:问题的所有答案,返回生成器
返回类型:Answer.Iterable
author

获取问题的提问者.

返回:提问者
返回类型:Author or zhihu.ANONYMOUS
creation_time
返回:问题创建时间
返回类型:datetime.datetime
deleted

问题是否被删除, 被删除了返回 True, 未被删除返回 False :return: True or False

details

获取问题详细描述,目前实现方法只是直接获取文本,效果不满意……等更新.

返回:问题详细描述
返回类型:str
follower_num

获取问题关注人数.

返回:问题关注人数
返回类型:int
followers

获取关注此问题的用户

返回:关注此问题的用户
返回类型:Author.Iterable
问题:要注意若执行过程中另外有人关注,可能造成重复获取到某些用户
html

获取页面源码.

返回:页面源码
返回类型:str
id

获取问题id(网址最后的部分).

返回:问题id
返回类型:int
last_edit_time
返回:问题最后编辑时间
返回类型:datetime.datetime
qid

获取问题内部id(用不到就忽视吧)

返回:问题内部id
返回类型:int
refresh()[源代码]

刷新 Question object 的属性. 例如回答数增加了, 先调用 refresh() 再访问 answer_num 属性, 可获得更新后的答案数量.

返回:None
title

获取问题标题.

返回:问题标题
返回类型:str
top_answer

获取排名第一的答案.

返回:排名第一的答案
返回类型:Answer
top_i_answer(i)[源代码]

获取排名某一位的答案.

参数:i (int) – 要获取的答案的排名
返回:答案对象,能直接获取的属性参见answers方法
返回类型:Answer
top_i_answers(i)[源代码]

获取排名在前几位的答案.

参数:i (int) – 获取前几个
返回:答案对象,返回生成器
返回类型:Answer.Iterable
topics

获取问题所属话题.

返回:问题所属话题
返回类型:Topic.Iterable
xsrf

获取知乎的反xsrf参数(用不到就忽视吧~)

返回:xsrf参数
返回类型:str

Topic 话题类

class zhihu.topic.Topic(url, name=None, session=None)[源代码]

答案类,请使用``ZhihuClient.topic``方法构造对象.

__init__(url, name=None, session=None)[源代码]

创建话题类实例.

参数:
  • url – 话题url
  • name – 话题名称,可选
返回:

Topic

answers

获取话题下所有答案(按时间降序排列)

返回:话题下所有答案,返回生成器
返回类型:Answer.Iterable
children

获取此话题的子话题

返回:此话题的子话题, 返回生成器
返回类型:Topic.Iterable
description

获取话题描述信息.

返回:话题描述信息
返回类型:str
follower_num

获取话题关注人数.

返回:关注人数
返回类型:int
followers

获取话题关注者

返回:话题关注者,返回生成器
返回类型:Author.Iterable
hot_answers

获取话题下热门的回答

返回:话题下的热门动态中的回答,按热门度顺序返回生成器
返回类型:Question.Iterable
hot_questions

获取话题下热门的问题

返回:话题下的热门动态中的问题,按热门度顺序返回生成器
返回类型:Question.Iterable
id

获取话题Id(网址最后那串数字)

返回:话题Id
返回类型:int
name

获取话题名称.

返回:话题名称
返回类型:str
parents

获取此话题的父话题。 注意:由于没找到有很多父话题的话题来测试, 所以本方法可能再某些时候出现问题,请不吝反馈。

返回:此话题的父话题,返回生成器
返回类型:Topic.Iterable
photo_url

获取话题头像图片地址.

返回:话题头像url
返回类型:str
questions

获取话题下的所有问题(按时间降序排列)

返回:话题下所有问题,返回生成器
返回类型:Question.Iterable
tid

话题内部Id,有时候要用到

返回:话题内部Id
返回类型:int
top_answers

获取话题下的精华答案.

返回:话题下的精华答案,返回生成器.
返回类型:Answer.Iterable
top_authors

获取最佳回答者

返回:此话题下最佳回答者,一般来说是5个,要不就没有,返回生成器
返回类型:Author.Iterable
unanswered_questions

获取话题下的等待回答的问题

什么是「等待回答」的问题:https://www.zhihu.com/question/40470324

返回:话题下等待回答的问题,返回生成器
返回类型:Question.Iterable
xsrf

获取知乎的反xsrf参数(用不到就忽视吧~)

返回:xsrf参数
返回类型:str

Indices and tables