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

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

  今天在无意之中发现了一个知乎的开源爬虫,是基于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 from zhihu_oauth import ZhihuClient
 2 from zhihu_oauth.exception import NeedCaptchaException
 3 client = ZhihuClient()
 4 user = 'email_or_phone'
 5 pwd = 'password'
 6 try:
 7     client.login(user, pwd)
 8     print(u"登陆成功!")
 9 except NeedCaptchaException: # 处理要验证码的情况
10     # 保存验证码并提示输入,重新登录
11     with open('a.gif', 'wb') as f:
12         f.write(client.get_captcha())
13     captcha = input('please input captcha:')
14     client.login('email_or_phone', 'password', captcha)
15 
16 client.save_token('token.pkl') # 保存token
17 #有了token之后,下次登录就可以直接加载token文件了
18 # client.load_token('filename')

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

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

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

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

热爱编程,热爱机器学习! github:http://www.github.com/Lyrichu github blog:http://Lyrichu.github.io 个人博客站点:http://www.movieb2b.com(不再维护)
目录
相关文章
|
18天前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
3天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
22天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
89 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
8天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
15天前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
20天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
22天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
21天前
|
数据采集 JavaScript 前端开发
Python爬虫能处理动态加载的内容吗?
Python爬虫可处理动态加载内容,主要方法包括:使用Selenium模拟浏览器行为;分析网络请求,直接请求API获取数据;利用Pyppeteer控制无头Chrome。这些方法各有优势,适用于不同场景。
|
28天前
|
数据采集 监控 搜索推荐
python爬虫的基本使用
本文介绍了Python爬虫的基本概念及其广泛应用,包括搜索引擎、数据挖掘、网络监控、舆情分析和信息聚合等领域。通过安装`urllib`和`BeautifulSoup`库,展示了如何编写简单代码实现网页数据的抓取与解析。爬虫技术在大数据时代的重要性日益凸显,为各行业提供了高效的数据获取手段。
33 1
|
26天前
|
存储 算法 安全
FreeMQTT:一款Python语言实现的开源MQTT Server
FreeMQTT 是一款用 Python 语言并基于 Tornado 开发的开源 MQTT 服务器,支持 MQTT3.1.1 和 MQTT5.0 协议,提供多租户安全隔离、高效 Topic 匹配算法及实时上下线通知等功能,适用于 IoT 场景。快速启动仅需克隆仓库、安装依赖并运行服务。