今天在无意之中发现了一个知乎的开源爬虫,是基于Python的,名字叫zhihu_oauth,看了一下在github上面star数还挺多的,貌似文档也挺详细的,于是就稍微研究了一下。发现果然很好用啊。就在这里给大家介绍一下如何使用。

  项目的主页地址在:https://github.com/7sDream/zhihu-oauth。作者的知乎主页为:https://www.zhihu.com/people/7sdream/。

  项目的文档地址为:http://zhihu-oauth.readthedocs.io/zh_CN/latest/index.html 。讲道理,原作者对于该怎么使用这个库已经讲的非常详细了,我在这里再重复一遍简直就是画蛇添足。所以大家要是想详细了解这个库怎么用,就去官方文档吧。我只说一下我觉得需要补充的重要的几点。

  首先是安装。作者已经将项目上传到pypi了,所以我们可以直接使用pip进行安装了。按照作者的说法,项目对于Python3的支持更好,淡然目前也是兼容Python2的,所以大家最好使用python3.直接 pip3 install -U zhihu_oauth 即可安装。

  安装好了第一步就是登陆。直接使用下面的代码就可以登陆。

  

  1. 1 from zhihu_oauth import ZhihuClient
  2. 2 from zhihu_oauth.exception import NeedCaptchaException
  3. 3 client = ZhihuClient()
  4. 4 user = 'email_or_phone'
  5. 5 pwd = 'password'
  6. 6 try:
  7. 7 client.login(user, pwd)
  8. 8 print(u"登陆成功!")
  9. 9 except NeedCaptchaException: # 处理要验证码的情况
  10. 10 # 保存验证码并提示输入,重新登录
  11. 11 with open('a.gif', 'wb') as f:
  12. 12 f.write(client.get_captcha())
  13. 13 captcha = input('please input captcha:')
  14. 14 client.login('email_or_phone', 'password', captcha)
  15. 15
  16. 16 client.save_token('token.pkl') # 保存token
  17. 17 #有了token之后,下次登录就可以直接加载token文件了
  18. 18 # client.load_token('filename')

上面的代码是直接使用账号密码登陆,最后保存了登陆之后的token,在下次登录的时候我们就可以直接使用token登录而不用每次都输入密码了。

在登录完成之后,可以干的事情当然就很多了,比如下面的代码就可以获得自己的知乎账户的基本信息

  1. 1 from __future__ import print_function # 使用python3的print方法
  2. 2 from zhihu_oauth import ZhihuClient
  3. 3
  4. 4 client = ZhihuClient()
  5. 5 client.load_token('token.pkl') # 加载token文件
  6. 6 # 显示自己的相关信息
  7. 7 me = client.me()
  8. 8
  9. 9 # 获取最近 5 个回答
  10. 10 for _, answer in zip(range(5), me.answers):
  11. 11 print(answer.question.title, answer.voteup_count)
  12. 12
  13. 13 print('----------')
  14. 14
  15. 15 # 获取点赞量最高的 5 个回答
  16. 16 for _, answer in zip(range(5), me.answers.order_by('votenum')):
  17. 17 print(answer.question.title, answer.voteup_count)
  18. 18
  19. 19 print('----------')
  20. 20
  21. 21 # 获取最近提的 5 个问题
  22. 22 for _, question in zip(range(5), me.questions):
  23. 23 print(question.title, question.answer_count)
  24. 24
  25. 25 print('----------')
  26. 26
  27. 27 # 获取最近发表的 5 个文章
  28. 28 for _, article in zip(range(5), me.articles):
  29. 29 print(article.title, article.voteup_count)

当然可以干的事情还远远不止这些,比如我们知道了某个问题的url地址或者问题id,就可以获得这个问题下有多少个回答,作者的信息等等一系列详细的信息。开发者想的真的挺周到的,一般常见的需要的信息基本全部都包括了。具体的代码我就不贴了,大家自行参考官方文档。

一个小的tips:由于这个库有好多个类,比如获得作者信息的类,获得文章信息的类等等。每个类都有非常多的方法,我去看了一下官方文档,作者有些类的属性就没有完全列出来,那么我们怎么查看这个类全部的属性呢?其实很简单,只需要使用python的dir函数就可以了,使用dir(object)可以查看object类(或对象)的全部属性。比如我们有一个answer类对象,使用dir(answer)就会返回answer对象所有属性的列表。除去默认的一些属性之外,我们就可以找到这个类的我们需要的属性了,很方便吧。(下面是collection即收藏夹类的全部属性)

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_build_data', '_build_params', '_build_url', '_cache', '_data', '_get_data', '_id', '_method', '_refresh_times', '_session', 'answer_count', 'answers', 'articles', 'comment_count', 'comments', 'contents', 'created_time', 'creator', 'description', 'follower_count', 'followers', 'id', 'is_public', 'pure_data', 'refresh', 'title', 'updated_time']

最后,我使用这个类,抓取了知乎某个问题下所有回答中的图片(抓美女图,哈哈哈哈),只用了不到30行代码(去掉注释)。分享给大家。

  1. 1 #!/usr/bin/env python
  2. 2 # -*- coding: utf-8 -*-
  3. 3 # @Time : 2017/5/3 14:27
  4. 4 # @Author : Lyrichu
  5. 5 # @Email : 919987476@qq.com
  6. 6 # @File : save_images.py
  7. 7 '''
  8. 8 @Description:保存知乎某个问题下所有答案的图片
  9. 9 '''
  10. 10 from __future__ import print_function # 使用python3的print方法
  11. 11 from zhihu_oauth import ZhihuClient
  12. 12 import re
  13. 13 import os
  14. 14 import urllib
  15. 15
  16. 16 client = ZhihuClient()
  17. 17 # 登录
  18. 18 client.load_token('token.pkl') # 加载token文件
  19. 19 id = 24400664 # https://www.zhihu.com/question/24400664(长得好看是一种怎么样的体验)
  20. 20 question = client.question(id)
  21. 21 print(u"问题:",question.title)
  22. 22 print(u"回答数量:",question.answer_count)
  23. 23 # 建立存放图片的文件夹
  24. 24 os.mkdir(question.title + u"(图片)")
  25. 25 path = question.title + u"(图片)"
  26. 26 index = 1 # 图片序号
  27. 27 for answer in question.answers:
  28. 28 content = answer.content # 回答内容
  29. 29 re_compile = re.compile(r'<img src="(https://pic\d\.zhimg\.com/.*?\.(jpg|png))".*?>')
  30. 30 img_lists = re.findall(re_compile,content)
  31. 31 if(img_lists):
  32. 32 for img in img_lists:
  33. 33 img_url = img[0] # 图片url
  34. 34 urllib.urlretrieve(img_url,path+u"/%d.jpg" % index)
  35. 35 print(u"成功保存第%d张图片" % index)
  36. 36 index += 1

如果要是自己写的话,直接抓取解析网页是无法获得全部回答的,所以只能去破解知乎的api,比较麻烦,使用这个现成的轮子就方便很多了。以后想慢慢欣赏知乎的美女就再也不用发愁啦,嘿嘿嘿。

基于python的知乎开源爬虫 zhihu的更多相关文章

  1. 基于python的知乎开源爬虫 zhihu_oauth使用介绍

    今天在无意之中发现了一个知乎的开源爬虫,是基于Python的,名字叫zhihu_oauth,看了一下在github上面star数还挺多的,貌似文档也挺详细的,于是就稍微研究了一下.发现果然很好用啊.就 ...

  2. 基于Python,scrapy,redis的分布式爬虫实现框架

    原文  http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...

  3. 一种基于python的人脸识别开源系统

    今天在搜索人脸识别的文章时,无意中搜到一个比较开源代码,介绍说是这个系统人脸的识别率 是比较高的,可以达到:99.38%.这么高的识别率,着实把我吓了一跳.抱着实事求是的态度.个人 就做了一些验证和研 ...

  4. 开源爬虫Labin,Nutch,Neritrix介绍和对比

    crawler 开发 语言 功能 单一 支持分布式 爬取 效率 镜像 保存 Nutch Java × √ 低 × Larbin C++ √ × 高 √ Heritrix Java √ × 中 √ ** ...

  5. 基于python的pixiv爬虫

    基于python的pixiv爬虫 1.目标 在和朋友吹逼过程中,聊到qq群机器人,突发奇想动手做一个p站每日推荐色图的色图机,遂学习爬虫. 目标: 批量下载首页推荐色图. 由于对qq机器人不熟,先利用 ...

  6. [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍

    声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...

  7. 基于Python使用SVM识别简单的字符验证码的完整代码开源分享

    关键字:Python,SVM,字符验证码,机器学习,验证码识别 1   概述 基于Python使用SVM识别简单的验证字符串的完整代码开源分享. 因为目前有了更厉害的新技术来解决这类问题了,但是本文作 ...

  8. TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具

    怀着鸡动的心情跟大家介绍一款国产开源运维软件TriAquae,轻松帮你搞定大部分运维工作!TriAquae 是一款由国产的基于Python开发的开源批量部署管理工具,可以允许用户通过一台控制端管理上千 ...

  9. 基于python的爬虫项目

    一.项目简介 1.1 项目博客地址 https://www.cnblogs.com/xsfa/p/12083913.html 1.2 项目完成的功能与特色 爬虫和拥有三个可视化数据分析 1.3 项目采 ...

随机推荐

  1. Mysql数据库事务的四大特性:

    什么是事务? 事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行.为什么要使用事务:保证对数据操作的完整性和准确性.1,原子性:一个事 ...

  2. Tensorflow 对上一节神经网络模型的优化

    本节涉及的知识点: 1.在程序中查看变量的取值 2.张量 3.用张量重新组织输入数据 4.简化的神经网络模型 5.标量.多维数组 6.在TensorFlow中查看和设定张量的形态 7.用softmax ...

  3. Python学习之并发基础知识

    8 并发编程 8.1 基础知识 8.1.1 操作系统的定义 操作系统是存在于硬件与软件之间,管理.协调.调度软件与硬件的交互. 资源管理解决物理资源数量不足和合理分配资源这两个问题, 通俗来说,操作系 ...

  4. SSM的开发步骤分析

    完整开发步骤 导包 spring的jar包 mybatis的jar包 mybatis-Spring的jar包 aop的依赖jar包 oracle等数据库连接的jar包 DataSource的jar包 ...

  5. cf1151e number of components

    很常见的思想:将整体求改为统计每个部分的贡献 本题中统计[l, r]时, 每个连通块有一个重要特征, 最右端的数在[l,r]中而下一个数不在(好像是句废话 那么我们分别考虑每个点对连通块的贡献, 即它 ...

  6. C++ 多文件编译简述:头文件、链接性、声明与定义

    目录 Commen Sense 头文件 链接性 static 与链接性控制 extern 与外部链接性 Reference Commen Sense C++ 在编译时对每个翻译单元(Translati ...

  7. 问题记录 | 配置ubuntu18.04+cuda9.0+cudnn服务器tensorflow-gpu深度学习环境

    因为实验室服务器资源有限,我被分配的服务器经常变化,但是常常就分到连显卡驱动以及cuda都没有装的服务器,真的很头疼,我已经配了四五台了,特此记录一下,以便以后直接照版本安装. Install nvi ...

  8. 爬取网易云音乐评论!python 爬虫入门实战(六)selenium 入门!

    说到爬虫,第一时间可能就会想到网易云音乐的评论.网易云音乐评论里藏了许多宝藏,那么让我们一起学习如何用 python 挖宝藏吧! 既然是宝藏,肯定是用要用钥匙加密的.打开 Chrome 分析 Head ...

  9. xshell登陆后脚本

    vbs的写法: Sub Main xsh.Screen.Send "ssh 用户名@服务器地址" xsh.Screen.Send VbCr xsh.Screen.WaitForSt ...

  10. POJ - 2421 Constructing Roads(最小生成树&并查集

    There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...