GithubHelp home page GithubHelp logo

zhihu-py3's Introduction

zhihu-py3 : 知乎解析器 with Python3

Documentation Status

说明:2015.07.24 对代码进行了比较大的重构,更新前请务必查看ChangeLog

功能

由于知乎没有公开API,加上受到zhihu-python项目的启发,在Python3下重新写了一个知乎的数据解析模块。

提供的功能一句话概括为,用户提供知乎的网址构用于建对应类的对象,可以获取到某些需要的数据。

简单例子:

url = 'http://www.zhihu.com/question/24825703'
question = zhihu.Question(url)

print(question.title)
print(question.answer_num)
print(question.follower_num)
print(question.topics)

for answer in question.answers:
    print(answer.author.name, answer.upvote_num)

这段代码的输出为:

关系亲密的人之间要说「谢谢」吗?
630
4316
['心理学', '恋爱', '社会', '礼仪', '亲密关系']
小不点儿 197
龙晓航 49
芝士就是力量 89
欧阳忆希 424
甜阁下 1155

另外还有Author(用户)Answer(答案)Collection(收藏夹)Column(专栏)Post(文章)Topic(话题)等类可以使用,Answer,Post类提供了save方法能将答案或文章保存为HTML或Markdown格式,具体请看文档,或者zhihu-test.py

依赖

本项目依赖于 requestsBeautifulSoup4html2text 使用前请先安装

html2text 只在导出为 markdown 格式功能被使用时才会被 import,如果没有此模块其他功能也能正常完成。

pip install requests
pip install beautifulsoup4
pip install html2text

Linux下同时安装了Python2和3的用户请使用pip3 install xxx代替(应该不用我说……)

准备工作

首次使用之前请先运行以下代码生成 cookies 文件:

import zhihu

zhihu.create_cookies()

运行结果

In [1]: import zhihu
no cookies file, this may make something wrong.
if you will run create_cookies or login next, please ignore me.

In [2]: zhihu.create_cookies()
email: <your-email-address>
password: <your-password>
please check code.gif
captcha: <captcha>
cookies file created!

运行成功后会在目录下生成cookies.json文件,请保持此文件和zhihu.py在同一目录下。

以下示例皆以正确生成了 cookies 文件为前提。

建议在正式使用之前运行zhihu-test.py测试一下。

用法实例

获取某用户的基本信息

import zhihu
author = zhihu.Author('http://www.zhihu.com/people/rainy-vczh')

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)

结果:

用户名 vczh
用户简介 专业造轮子 https://github.com/vczh-libraries
用户关注人数 1334
取用户粉丝数 124759
用户得到赞同数 317088
用户得到感谢数 42672
用户提问数 237
用户答题数 8345
用户专栏文章数 25,名称分别为:
vczh的日常
深井冰 IT 评论
编程语言与高级语言虚拟机杂谈(仮)
蓝色小药丸
用户收藏夹数 1,名称分别为:
李老师牛逼的答案

备份某问题所有答案

import zhihu

question = zhihu.Question('http://www.zhihu.com/question/28092572')
for answer in question.answers:
    answer.save()

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

save 函数默认目录为当前目录下以问题标题命名的目录,默认文件名为问题标题加上答题者昵称,有相同昵称的情况下自动加上序号。

answer.save(mode="md")

将会导出为 markdown 格式,下同。

备份某用户所有答案

import zhihu

author = zhihu.Author('http://www.zhihu.com/people/7sdream')
for answer in author.answers:
    # print(answer.question.title)
    answer.save(filepath=author.name)

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

获取某用户点赞的动态

import zhihu

author = zhihu.Author('http://www.zhihu.com/people/rainy-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
vczh 在 2015-07-24 06:43:49 赞同了问题 为什么好多中学生浑浑噩噩还不知悔改? 中 胖子邓(motto: living, writing, loving.) 的回答, 此回答赞同数 1162
vczh 在 2015-07-24 06:33:42 赞同了问题 真皮座椅的汽车到底应不应该放座套? 中 赵奕寒(motto: Safe Choix项目发起人) 的回答, 此回答赞同数 44
……

用户activities属性的完整用法可查看zhihu-test.pytest_author函数

其他常用方法

create_cookies

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

get_captcha_url

获取验证码 url, 当用于其他项目时方便手动获取验证码图片进行处理

login

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

  • email
  • password
  • captcha
  • savecookies 默认为 True

remove_invalid_char

删除字符串中不能出现在文件名中的字符,参数为要处理的字符串

可修改代码中的invalid_char_list来定义非法字符

文档

终于搞定了文档这个磨人的小妖精,可惜 Sphinx 还是不会用 T^T 先随意弄成这样吧:

Read The Docs: 点击这里查看文档

TODO List

  • 增加获取答案点赞用户功能
  • 增加获取用户关注者,用户追随者,收藏夹关注者,问题关注者等等

联系我

Github:@7sDream

知乎:@7sDream

新浪微博:@Dilover

邮箱:给我发邮件

编程交流群:478786205

zhihu-py3's People

Contributors

gracker avatar

Watchers

James Cloos avatar nju520 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.