基于python的知乎开源爬虫 zhihu_oauth使用介绍
今天在无意之中发现了一个知乎的开源爬虫,是基于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 即可安装。
安装好了第一步就是登陆。直接使用下面的代码就可以登陆。
from zhihu_oauth import ZhihuClient
from zhihu_oauth.exception import NeedCaptchaException
client = ZhihuClient()
user = 'email_or_phone'
pwd = 'password'
try:
client.login(user, pwd)
print(u"登陆成功!")
except NeedCaptchaException: # 处理要验证码的情况
# 保存验证码并提示输入,重新登录
with open('a.gif', 'wb') as f:
f.write(client.get_captcha())
captcha = input('please input captcha:')
client.login('email_or_phone', 'password', captcha) client.save_token('token.pkl') # 保存token
#有了token之后,下次登录就可以直接加载token文件了
# client.load_token('filename')
上面的代码是直接使用账号密码登陆,最后保存了登陆之后的token,在下次登录的时候我们就可以直接使用token登录而不用每次都输入密码了。
在登录完成之后,可以干的事情当然就很多了,比如下面的代码就可以获得自己的知乎账户的基本信息
from __future__ import print_function # 使用python3的print方法
from zhihu_oauth import ZhihuClient client = ZhihuClient()
client.load_token('token.pkl') # 加载token文件
# 显示自己的相关信息
me = client.me() # 获取最近 5 个回答
for _, answer in zip(range(5), me.answers):
print(answer.question.title, answer.voteup_count) print('----------') # 获取点赞量最高的 5 个回答
for _, answer in zip(range(5), me.answers.order_by('votenum')):
print(answer.question.title, answer.voteup_count) print('----------') # 获取最近提的 5 个问题
for _, question in zip(range(5), me.questions):
print(question.title, question.answer_count) print('----------') # 获取最近发表的 5 个文章
for _, article in zip(range(5), me.articles):
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行代码(去掉注释)。分享给大家。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/5/3 14:27
# @Author : Lyrichu
# @Email : 919987476@qq.com
# @File : save_images.py
'''
@Description:保存知乎某个问题下所有答案的图片
'''
from __future__ import print_function # 使用python3的print方法
from zhihu_oauth import ZhihuClient
import re
import os
import urllib client = ZhihuClient()
# 登录
client.load_token('token.pkl') # 加载token文件
id = 24400664 # https://www.zhihu.com/question/24400664(长得好看是一种怎么样的体验)
question = client.question(id)
print(u"问题:",question.title)
print(u"回答数量:",question.answer_count)
# 建立存放图片的文件夹
os.mkdir(question.title + u"(图片)")
path = question.title + u"(图片)"
index = 1 # 图片序号
for answer in question.answers:
content = answer.content # 回答内容
re_compile = re.compile(r'<img src="(https://pic\d\.zhimg\.com/.*?\.(jpg|png))".*?>')
img_lists = re.findall(re_compile,content)
if(img_lists):
for img in img_lists:
img_url = img[0] # 图片url
urllib.urlretrieve(img_url,path+u"/%d.jpg" % index)
print(u"成功保存第%d张图片" % index)
index += 1
如果要是自己写的话,直接抓取解析网页是无法获得全部回答的,所以只能去破解知乎的api,比较麻烦,使用这个现成的轮子就方便很多了。以后想慢慢欣赏知乎的美女就再也不用发愁啦,嘿嘿嘿。

基于python的知乎开源爬虫 zhihu_oauth使用介绍的更多相关文章
- 基于python的知乎开源爬虫 zhihu
今天在无意之中发现了一个知乎的开源爬虫,是基于Python的,名字叫zhihu_oauth,看了一下在github上面star数还挺多的,貌似文档也挺详细的,于是就稍微研究了一下.发现果然很好用啊.就 ...
- 基于Python,scrapy,redis的分布式爬虫实现框架
原文 http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...
- 一种基于python的人脸识别开源系统
今天在搜索人脸识别的文章时,无意中搜到一个比较开源代码,介绍说是这个系统人脸的识别率 是比较高的,可以达到:99.38%.这么高的识别率,着实把我吓了一跳.抱着实事求是的态度.个人 就做了一些验证和研 ...
- c++开源爬虫-Larbin简单介绍
原文地址:http://leihuang.net/2014/06/16/Larbin-Introduction/ 由于近期学校实训.做的是一个搜索相关的项目,而且是c++的一个项目.所以就想到了lar ...
- 开源爬虫Labin,Nutch,Neritrix介绍和对比
crawler 开发 语言 功能 单一 支持分布式 爬取 效率 镜像 保存 Nutch Java × √ 低 × Larbin C++ √ × 高 √ Heritrix Java √ × 中 √ ** ...
- 基于python的Selenium使用小结
之前介绍过基于Unittest和TestNG自动化测试框架,然而基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于Python的Selenium 一 ...
- 基于Python Requests的数据驱动的HTTP接口测试
发表于:2017-8-30 11:56 作者:顾翔 来源:51Testing软件测试网原创 http://www.51testing.com/html/69/n-3720769-2.html ...
- 基于Python实现的系统SLA可用性统计
基于Python实现的系统SLA可用性统计 1. 介绍 SLA是Service Level Agreement的英文缩写,也叫服务质量协议.根据SRE Google运维解密一书中的定义: SLA是服务 ...
- 基于python的pixiv爬虫
基于python的pixiv爬虫 1.目标 在和朋友吹逼过程中,聊到qq群机器人,突发奇想动手做一个p站每日推荐色图的色图机,遂学习爬虫. 目标: 批量下载首页推荐色图. 由于对qq机器人不熟,先利用 ...
随机推荐
- 解决input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能
最近做项目遇到: 背景:点击单元格,easyUI自动生成input可编辑框. 问题点:input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能 要实现需求: 1.回车键 ...
- intellij idea打jar包时的注意事项
intellij idea项目在打包maven项目时,数据路径很容易出现问题.在IDE内直接运行不会报错,但打成jar包运行就会报错. intellij打包的几种方式:http://www.cnblo ...
- 【树莓派】Linux应用相关:自动删除n天前日志
linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...
- struts2(四) ognl表达式、值栈、actionContext之间的关系
今天来说说ognl表达式在struts2中的运用. --wh 一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任 ...
- 让CEF支持FLASH(非安装插件的形式)
测试环境: CEF3 + CefGlue 下载FLASH的NPAPI DLL文件 , 在CEF目录下新建文件夹plugins,然后把DLL文件放进去即可. 据说下面是PPAPI的方式,未测试 启动的时 ...
- @ModelAttribute--SpringMVC 注解系列文章(二)
概述 在日常的开发工作中,更新操作是经常会涉及到的一个功能,但是对于一条记录的更新,往往只会更新一部分的信息,而不会整条记录都更新,比如修改用户年龄的时候,用户密码是不需要修改的,针对这种情况,处理的 ...
- js简单省级联动菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- bootstrap file input 官方文档翻译
file Input官方文档 中文翻译 file input 特性 1.这个插件会把简单的html文件变成一个更好用的文件选择输入控件,通过一个html的文件输入框,能兼容那些不支持jquery或js ...
- C++ Primer 5 CH7 类
7.1 定义抽象数据类型 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,定义可以在类的内部或外部.作为接口组成部分的非成员函数的声明和定义都在类的外部. 定义在类内部的函数是 ...
- 浅谈HTTP中Get与Post的区别[转载]
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...