Giter VIP home page Giter VIP logo

zhihu-python's Introduction

zhihu-python:获取知乎信息

注意: 本项目不再维护更新!

zhihu-python 采用 Python2.7 编写,用来方便地获取知乎上各种内容的信息,并且可以方便地将答案备份导出为 txt 或 markdown 文件。由于知乎官方目前没有提供 api,所以有了此项目的存在。

使用 Python3 的类似项目可以参见:zhihu-py3 。使用 PHP 的类似项目可以参见:zhihu-php 。使用 Go 的类似项目可以参见:zhihu-go

注: 本项目代码均在 Ubuntu14.04 上使用 python2.7.6 编写和测试通过,其他环境可能存在一定问题。

获取某个问题下的全部回答并导出,很简单:

from zhihu import Question

url = "http://www.zhihu.com/question/24269892"
question = Question(url)
answers = question.get_all_answers()
for answer in answers:
    answer.to_txt()
    answer.to_md()

会在当前目录下新建text,markdown两个文件夹,并将所有txt文件保存到text文件夹,所有markdown文件保存到markdown文件夹。

备份某大V的全部回答,也很简单:

from zhihu import User

user_url = "http://www.zhihu.com/people/jixin"
user = User(user_url)
answers = user.get_answers()
for answer in answers:
    answer.to_txt()
    answer.to_md()

导出的markdown,txt文件示例请见该项目的markdown,text文件夹。当然,想要知道某大V关注了那些人,提了什么问题也不在话下,详情请见:快速开始。

Tips :

  1. 确保你的系统里面已经安装了 Python2.7 ,不同作业系统如何安装不再赘述。
  2. 检查你系统中 python 和 pip 的版本, 如果不属于 python2.7 , 请在执行代码范例时,自行将 python 和 pip 分别替换成 python2.7 和 pip2 。
  3. 确保你的系统中安装了 git 程序 以及 python-pip 。

克隆本项目

git clone [email protected]:egrcc/zhihu-python.git
cd zhihu-python

解决依赖

sudo pip install -r requirements.txt

or

sudo pip2 install -r requirements.txt

登录知乎

登录 知乎 生成身份信息, 保存在当前目录的 cookies 文件中。

python auth.py

执行测试

python test.py

不出意外,一切应该完美运行 :))

Question 代表一个问题,处理知乎问题相关操作。创建一个 Question 对象需传入该问题的 url ,如:

from zhihu import Question

url = "http://www.zhihu.com/question/24269892"
question = Question(url)

得到 Question 对象后,可以获取该问题的一些信息:

# -*- coding: utf-8 -*-
from zhihu import Question

url = "http://www.zhihu.com/question/24269892"
question = Question(url)

# 获取该问题的标题
title = question.get_title()
# 获取该问题的详细描述
detail = question.get_detail()
# 获取回答个数
answers_num = question.get_answers_num()
# 获取关注该问题的人数
followers_num = question.get_followers_num()
# 获取该问题所属话题
topics = question.get_topics()
# 获取该问题被浏览次数
visit_times = question.get_visit_times()
# 获取排名第一的回答
top_answer = question.get_top_answer()
# 获取排名前十的十个回答
top_answers = question.get_top_i_answers(10)
# 获取所有回答
answers = question.get_all_answers()

print title  # 输出:现实可以有多美好?
print detail
# 输出:
# 本问题相对于“现实可以多残酷?传送门:现实可以有多残酷?
# 题主:       昨天看了“现实可以有多残酷“。感觉不太好,所以我
# 开了这个问题以相对应,希望能够“中和一下“。和那个问题题主不想
# 把它变成“比惨大会“一样,我也不想把这个变成“鸡汤故事会“,或者
# 是“晒幸福“比赛。所以大家从“现实,实际”的角度出发,讲述自己的
# 美好故事,让大家看看社会的冷和暖,能更加辨证地看待世界,是此
# 题和彼题共同的“心愿“吧。
print answers_num  # 输出:2441
print followers_num  # 输出:26910
for topic in topics:
    print topic,  # 输出:情感克制 现实 社会 个人经历
print visit_times  # 输出: 该问题当前被浏览的次数
print top_answer
# 输出:<zhihu.Answer instance at 0x7f8b6582d0e0>
# Answer类对象
print top_answers
# 输出:<generator object get_top_i_answers at 0x7fed676eb320>
# 代表前十的Answer的生成器
print answers
# 输出:<generator object get_all_answer at 0x7f8b66ba30a0>
# 代表所有Answer的生成器

Answer 代表了一个答案,处理知乎答案相关操作。创建一个 Answer 对象需传入该答案的 url ,如:

from zhihu import Answer

answer_url = "http://www.zhihu.com/question/24269892/answer/29960616"
answer = Answer(answer_url)

得到 Answer 对象后,可以获取该答案的一些信息:

# -*- coding: utf-8 -*-
from zhihu import Answer

answer_url = "http://www.zhihu.com/question/24269892/answer/29960616"
answer = Answer(answer_url)
# 获取该答案回答的问题
question = answer.get_question()
# 获取该答案的作者
author = answer.get_author()
# 获取该答案获得的赞同数
upvote = answer.get_upvote()
# 获取该答案所属问题被浏览次数
visit_times = answer.get_visit_times()
# 获取所有给该答案点赞的用户信息
voters = answer.get_voters()
# 把答案输出为txt文件
answer.to_txt()
# 把答案输出为markdown文件
answer.to_md()

print question
# <zhihu.Question instance at 0x7f0b25d13f80>
# 一个Question对象
print question.get_title()  # 输出:现实可以有多美好?
print author
# <zhihu.User instance at 0x7f0b25425b90>
# 一个User对象
print voters
# <generator object get_voters at 0x7f32fbe55730>
# 代表所有该答案点赞的用户的生成器
print author.get_user_id()  # 输出:田浩
print upvote  # 输出:9320
print visit_times  # 输出: 改答案所属问题被浏览次数

User 代表一个用户,处理用户相关操作。创建一个 User 对象需传入该用户的 url ,如:

from zhihu import User

user_url = "http://www.zhihu.com/people/jixin"
user = User(user_url)

得到 User 对象后,可以获取该用户的一些信息:

# -*- coding: utf-8 -*-
from zhihu import User

user_url = "http://www.zhihu.com/people/jixin"
user = User(user_url)
# 获取用户ID
user_id = user.get_user_id()
# 获取用户性别
user_gender = user.get_gender()
# 获取该用户的关注者人数
followers_num = user.get_followers_num()
# 获取该用户关注的人数
followees_num =user.get_followees_num()
# 获取该用户提问的个数
asks_num = user.get_asks_num()
# 获取该用户回答的个数
answers_num = user.get_answers_num()
# 获取该用户收藏夹个数
collections_num = user.get_collections_num()
# 获取该用户获得的赞同数
agree_num = user.get_agree_num()
# 获取该用户获得的感谢数
thanks_num = user.get_thanks_num()
# 获取该用户的头像url
head_img_url = user.get_head_img_url()

# 获取该用户关注的人
followees = user.get_followees()
# 获取关注该用户的人
followers = user.get_followers()
# 获取该用户提的问题
asks = user.get_asks()
# 获取该用户回答的问题的答案
answers = user.get_answers()
# 获取该用户的收藏夹
collections = user.get_collections()

print user_id # 黄继新
print followers_num # 614840
print followees_num # 8408
print asks_num # 1323
print answers_num # 786
print collections_num # 44
print agree_num # 46387
print thanks_num # 11477
print head_img_url  # https://pic2.zhimg.com/0626f4164009f291b26a79d96c6962c5_l.jpg

print followees
# <generator object get_followee at 0x7ffcac3af050>
# 代表所有该用户关注的人的生成器对象
print followers
# <generator object get_follower at 0x7ffcac3af0f0>
# 代表所有关注该用户的人的生成器对象
print asks
# <generator object get_ask at 0x7ffcab9db780>
# 代表该用户提的所有问题的生成器对象
print answers
# <generator object get_answer at 0x7ffcab9db7d0>
# 代表该用户回答的所有问题的答案的生成器对象
print collections
# <generator object get_collection at 0x7ffcab9db820>
# 代表该用户收藏夹的生成器对象

Collection 代表一个收藏夹,处理收藏夹相关操作。创建一个 Collection 对象需传入该收藏夹的 url ,如:

from zhihu import Collection

collection_url = "http://www.zhihu.com/collection/36750683"
collection = Collection(collection_url)

得到 Collection 对象后,可以获取该收藏夹的一些信息:

# -*- coding: utf-8 -*-
from zhihu import Collection

collection_url = "http://www.zhihu.com/collection/36750683"
collection = Collection(collection_url)

# 获取该收藏夹的创建者
creator = collection.get_creator()
# 获取该收藏夹的名字
name = collection.get_name()
# 获取该收藏夹下的前十个答案
top_answers = collection.get_top_i_answers(10)
# 获取该收藏夹下的所有答案
answers = collection.get_all_answers()

print creator
# <zhihu.User instance at 0x7fe1296f29e0>
# 一个User对象
print creator.get_user_id() # 稷黍
print name # 给你一个不同的视角
print top_answers
# <generator object get_top_i_answers at 0x7f378465dc80>
# 代表前十个答案的生成器对象
print answers
# <generator object get_all_answer at 0x7fe12a29b280>
# 代表所有答案的生成器对象

Column 代表一个专栏,处理专栏相关操作。创建一个 Column 对象需传入该专栏的 url ,如:

from zhihu import Column

url = "http://zhuanlan.zhihu.com/daily"
column = Column(url)

得到 Column 对象后,可以获取该专栏的一些信息:

# -*- coding: utf-8 -*-
from zhihu import Column

url = "http://zhuanlan.zhihu.com/daily"
column = Column(url)

# 获取该专栏的标题
title = column.get_title()
# 获取该专栏的描述
description = column.get_description()
# 获取该专栏的作者
creator = column.get_creator()
# 获取该专栏的文章数
posts_num = column.get_posts_num()
# 获取该专栏的所有文章
posts = column.get_all_posts()

print title  # 输出:知乎日报
print description
# 输出:
# 知乎日报启动画面接受所有摄影师朋友们的投稿,将作品链接
#(如 Flickr、LOFTER 等等),发至邮箱 qidong (at) zhihu.com,
# 并附上您的知乎个人页面地址即可。
#
# 详细投稿要求: http://t.cn/zQyEpN5

print creator
# 输出:<zhihu.User instance at 0x75e33eb8>
# User类对象
print posts_num # 150
print posts
# 输出:<generator object get_all_posts at 0x75e33bc0>
# Post类对象

Post 代表一个专栏文章,处理专栏文章相关操作。创建一个 Post 对象需传入该文章的 url ,如:

from zhihu import Post

url = "http://zhuanlan.zhihu.com/p/20235601"
post = Post(url)

得到 Post 对象后,可以获取该文章的一些信息:

# -*- coding: utf-8 -*-
from zhihu import Post

url = "http://zhuanlan.zhihu.com/p/20770968"
post = Post(url)

# 获取该文章的标题
title = post.get_title()
# 获取该文章的内容
content = post.get_content()
# 获取该文章的作者
author = post.get_author()
# 获取该文章的所属专栏
column = post.get_column()
# 获取该文章所属话题
topics = post.get_topics()

print title  # 输出:夜读书|四月十九日
print content
# 输出:
# <p>各位,晚上好。<br> ...
# ......
print author
# 输出: <zhihu.User instance at 0x75ec0fd0>
for topic in topics:
    print topic,  # 输出:阅读
print column
# 输出:<zhihu.Column instance at 0x75eb3eb8>
# Column类对象

将 Question , Answer , User , Collection 结合起来使用。实例如下:

# -*- coding: utf-8 -*-
from zhihu import Question
from zhihu import Answer
from zhihu import User
from zhihu import Collection

url = "http://www.zhihu.com/question/24269892"
question = Question(url)
# 得到排名第一的答案
answer = question.get_top_answer()
# 得到排名第一的答案的作者
user = answer.get_author()
# 得到该作者回答过的所有问题的答案
user_answers = user.get_answers()
# 输出该作者回答过的所有问题的标题
for answer in user_answers:
    print answer.get_question().get_title()
# 得到该用户的所有收藏夹
user_collections = user.get_collections()
for collection in user_collections:
    # 输出每一个收藏夹的名字
    print collection.get_name()
    # 得到该收藏夹下的前十个回答
    top_answers = collection.get_top_i_answers(10)
    # 把答案内容转成txt,markdown
    for answer in top_answers:
        answer.to_txt()
        answer.to_md()

以上示例均可以在test.py文件中找到。

虽然是单线程,但速度不算太慢。抓取 哪些东西买了之后,会让人因生活质量和幸福感提升而感觉相见恨晚? 下前200个回答,91秒;抓取 有哪些 100 元以下,很少见但高大上的物件? 下前50个回答,48秒;抓取 现实可以有多美好? 下前200个回答,69秒。生成的文件请见markdown,text文件夹。所有匿名用户的回答放在一个文件里面。

class zhihu. Question (url, title = None)

Question 以 url 为唯一标识,创建一个 Question 对象实例必须传入一个代表知乎问题的 url (如: http://www.zhihu.com/question/26611428),需包含“http://”。如果传入的不是代表问题的 url ,程序会报错。通过调用 Question 类的一系列方法,获得该问题的一些信息。

Parameters
  • url -- 该问题的链接,字符串
  • title -- 该问题的标题,字符串,可选

Returns: 一个 Question 实例对象

get_title ()

得到该问题的标题。

Returns: 代表标题的字符串

get_detail ()

得到该问题的详细描述。原问题的描述可能带有图片或视频,这里得到的是纯文字。

Returns: 代表详细描述的字符串

get_answers_num ()

得到该问题的回答个数。

Returns: 代表回答个数的 int 型整数

get_followers_num ()

得到关注该问题的人数。

Returns: 代表人数的 int 型整数

get_topics ()

得到该问题所属的话题。

Returns: 一个 list ,每一个元素为代表一个话题的字符串

注:以后可能会添加一个 Topic 类,到时候每一个元素为代表一个话题的 Topic 类对象。

get_all_answers ()

得到该问题的所有回答。

Returns: 包含所有答案的 generator 对象。其中每一个元素为代表一个答案的 Answer 对象

get_top_i_answers (n)

得到该问题的前 n 个回答。

Parametersn -- int 型整数

Returns: 包含前 n 个答案的 generator 对象。其中每一个元素为代表一个答案的 Answer 对象

get_top_answer ()

得到目前排名第一的回答。

Returns: 代表该答案的 Answer 对象

get_visit_times ()

得到该问题被浏览次数。该方法由 @lufo816 添加。

Returns: 代表浏览次数的 int 型整数

class zhihu. User (user_url, user_id = None)

User 以 url 为唯一标识,创建一个 User 对象实例必须传入一个代表知乎用户的 url (如: http://www.zhihu.com/people/egrcc),需包含“http://”。如果传入的不是代表用户的 url ,程序会报错。通过调用 User 类的一系列方法,获得该用户的一些信息。

Parameters
  • user_url -- 该用户的链接,字符串
  • user_id -- 该用户的 ID ,字符串,可选

Returns: 一个 User 实例对象

get_user_id ()

得到该用户的ID。

Returns: 代表 ID 的字符串

get_gender ()

得到该用户的性别。

Returns: 代表 性别 的字符串(male/female)

get_followees_num ()

得到该用户关注的人的个数。

Returns: 代表人数的 int 型整数

get_followers_num ()

得到关注该用户的人的个数。

Returns: 代表人数的 int 型整数

get_agree_num ()

得到该用户获得的赞同数。

Returns: 代表赞同数的 int 型整数

get_thanks_num ()

得到该用户获得的感谢数。

Returns: 代表感谢数的 int 型整数

get_head_img_url (scale)

获取用户头像url。该方法由 @liuwons 添加。

Parametersscale int 型整数,代表尺寸: 1(25×25), 3(75×75), 4(100×100), 6(150×150), 10(250×250)

Returns: 对应尺寸头像的图片链接, 字符串

get_asks_num ()

得到该用户提问题的个数。

Returns: 代表问题数的 int 型整数

get_answers_num ()

得到该用户回答问题的个数。

Returns: 代表问题数的 int 型整数

get_collections_num ()

得到该用户收藏夹的个数。

Returns: 代表收藏夹数的 int 型整数

get_followees ()

得到该用户关注的人。

Returns: 包含所有该用户关注的人的 generator 对象。其中每一个元素为代表一个用户的 User 对象

get_followers ()

得到关注该用户的人。

Returns: 包含所有关注该用户的人的 generator 对象。其中每一个元素为代表一个用户的 User 对象

get_asks ()

得到该用户提的所有问题。

Returns: 包含所有问题的 generator 对象。其中每一个元素为代表一个问题的 Question 对象

get_answers ()

得到该用户回答的所有问题的答案。

Returns: 包含所有回答的 generator 对象。其中每一个元素为代表一个回答的 Answer 对象

get_collections ()

得到该用户的所有收藏夹。

Returns: 包含所有收藏夹的 generator 对象。其中每一个元素为代表一个收藏夹的 Collection 对象

class zhihu. Answer (answer_url, question = None, author = None, upvote = None, content = None)

Answer 以 url 为唯一标识,创建一个 Answer 对象实例必须传入一个代表知乎回答的 url (如: http://www.zhihu.com/question/19878575/answer/14776495),需包含“http://”。如果传入的不是代表回答的 url ,程序会报错。通过调用 Answer 类的一系列方法,获得该回答的一些信息。一般不自己创建Answer对象。

Parameters
  • answer_url -- 该答案的链接,字符串
  • question -- 该答案回答的问题, Question 对象,可选
  • author -- 该答案的作者, User 对象,可选
  • upvote -- 该答案获得的赞同数, int 型整数,可选
  • content -- 该答案的内容, BeautifulSoup 对象,可选

Returns: 一个 Answer 实例对象

get_question ()

得到该答案回答的问题。

Returns: 一个 Question 对象

get_author ()

得到该答案的作者 。

Returns: 一个 User 对象

get_upvote ()

得到该答案获得的赞同数。

Returns: 一个 int 型整数

get_content ()

得到该答案的内容。

Returns: 一个 BeautifulSoup 对象

get_visit_times ()

得到该答案所属问题被浏览次数。该方法由 @lufo816 添加。

Returns: 代表浏览次数的 int 型整数

get_voters ()

得到给该答案点赞的用户。该方法由 @lufo816 添加。

Returns: 包含所有给该答案点赞的用户的 generator 对象。其中每一个元素为代表一个用户的 User 对象

to_txt ()

将该答案转成txt文件,并会在当前目录下创建一个text文件夹,所生成的txt文件均保存在该文件夹。

to_md ()

将该答案转成markdown文件,并会在当前目录下创建一个markdown文件夹,所生成的markdown文件均保存在该文件夹。

class zhihu. Collection (url, name = None, creator = None)

Collection 以 url 为唯一标识,创建一个 Collection 对象实例必须传入一个代表知乎收藏夹的 url (如: http://www.zhihu.com/collection/27053469),需包含“http://”。如果传入的不是代表收藏夹的 url ,程序会报错。通过调用 Collection 类的一系列方法,获得该收藏夹的一些信息。

Parameters
  • url -- 该收藏夹的链接,字符串
  • name -- 该收藏夹的名字,字符串,可选
  • creator -- 该收藏夹的创建者,User 对象,可选

Returns: 一个 Collection 实例对象

get_name ()

得到该收藏夹的名字。

Returns: 代表名字的字符串

get_creator ()

得到该收藏夹的创建者。

Returns:代表创建者 User 对象

get_all_answers ()

得到该收藏夹收藏的所有回答。

Returns: 包含该收藏夹下所有回答的 generator 对象。其中每一个元素为代表一个回答的 Answer 对象

get_top_i_answers (n)

得到该收藏夹收藏的前 n 个回答。

Parametersn -- int 型整数

Returns: 包含该收藏夹下前 n 个回答的 generator 对象。其中每一个元素为代表一个回答的 Answer 对象

class zhihu. Column (Column_url)

Column 以 url 为唯一标识,创建一个 Column 对象实例必须传入一个代表知乎专栏的 url (如:http://zhuanlan.zhihu.com/daily),需包含“http(s)://”。如果传入的不是代表专栏的 url ,程序会报错。通过调用 Column 类的一系列方法,获得该专栏的一些信息。该类由 @johnnyluck 添加。

Parameters
  • column_url -- 该专栏的链接,字符串

Returns: 一个 Column 实例对象

get_title ()

得到该专栏的题目。

Returns: 一个代表题目的字符串

get_creator ()

得到该专栏的创建者。

Returns: 一个 User 对象

get_description ()

得到该专栏的描述。

Returns: 一个专栏描述的字符串

get_followers_num ()

得到该专栏的关注人数。

Returns: 一个 int 型的整数

get_posts_num ()

得到该专栏的所有文章数。

Returns: 一个 int 型的整数

get_content ()

得到该答案的内容。

Returns: 一个字符串

get_posts ()

得到该专栏的所有文章。

Returns:包含所有文章的 generator 对象。其中每一个元素为代表一个文章 Post 对象

class zhihu. Post (Post_url)

Post 以 url 为唯一标识,创建一个 Post 对象实例必须传入一个代表知乎文章的 url (如:http://zhuanlan.zhihu.com/p/20235601),需包含“http(s)://”。如果传入的不是代表文章的 url ,程序会报错。通过调用 Post 类的一系列方法,获得该文章的一些信息。该类由 @johnnyluck 添加。

Parameters
  • post_url -- 该文章的链接,字符串

Returns: 一个 Post 实例对象

get_title ()

得到该文章的题目。

Returns: 一个代表题目的字符串

get_author ()

得到该文章的作者。

Returns: 一个 User 对象

get_content ()

得到该文章的内容。

Returns: 一个文章描述的字符串

get_topics ()

得到该文章的话题。

Returns: 一个列表

get_column ()

得到该文章的所属专栏。

Returns:一个 Column 的实例对象

zhihu-python's People

Contributors

ecsys avatar egrcc avatar enaunimes avatar frostming avatar fxia22 avatar jiangtyc avatar johnnyluck avatar liuwons avatar lufo816 avatar luozijun avatar mukosame avatar riverrun46 avatar yannisxu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zhihu-python's Issues

get_all_answers()貌似无法处理自己回答

当某问题下回答包含自己的回答的时候。
Question.get_all_answers()貌似不能抓到自己的回答。
并且当自己的回答排在最后的时候会出错

    url="http://www.zhihu.com/question/xxxxx"
    Q=Question(url)
    for i in Q.get_all_answers():
        print i.answer_url
Traceback (most recent call last):
  File "/home/kehao/Documents/zhihu-python-master/test.py", line 37, in <module>
    get_a_question()
  File "/home/kehao/Documents/zhihu-python-master/test.py", line 28, in get_a_question
    for i in Q.get_all_answers():
  File "/home/kehao/Documents/zhihu-python-master/zhihu.py", line 188, in get_all_answers
    count = soup.find_all("span", class_="count")[j].string
IndexError: list index out of range

auth.py验证码请求失败

C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py:838: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/security.html
InsecureRequestWarning)
WARN: 网络故障
ERROR: 网络异常
Traceback (most recent call last):
File "C:/Users/Administrator/Downloads/zhihu-python-master/zhihu-python-master/auth.py", line 240, in
login(account="马赛克@qq.com", password="马赛克")
File "C:/Users/Administrator/Downloads/zhihu-python-master/zhihu-python-master/auth.py", line 213, in login
form_data = build_form(account, password)
File "C:/Users/Administrator/Downloads/zhihu-python-master/zhihu-python-master/auth.py", line 115, in build_form
form['_xsrf'] = search_xsrf()
File "C:/Users/Administrator/Downloads/zhihu-python-master/zhihu-python-master/auth.py", line 101, in search_xsrf
raise NetworkError(u"验证码请求失败")
main.NetworkError

登录需要验证码填写

r = s.post('http://www.zhihu.com/login', data = login_data, headers = header)

得到的是
{u'msg': {u'captcha': u'\u8bf7\u586b\u5199\u9a8c\u8bc1\u7801'}, u'r': 1, u'errcode': 269}

那些unicode的意思是“请填写验证码”,所以现在无法完成最开始的登录,不知道如何解决?谢谢!

无法正常的获取点赞的用户

设answers = user.get_answers()

for answer in answers:
voters = answer.get_voters()
中,执行
upvote = answer.get_upvote()
是正常的。
但是
for voter in voters:
upvoter.append(voter.user_url())
则出现错误。
附上代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 04 22:22:07 2016

@author: TsingJyujing
"""
from zhihu import Question
from zhihu import Answer
from zhihu import User
from zhihu import Collection

user_url = "https://www.zhihu.com/people/qing-yu-ying"
user = User(user_url)
answers = user.get_answers()
upvoter = []
upgende = []
userids = []

for answer in answers:
    voters = answer.get_voters()
    try:
        upvote = answer.get_upvote()
        print "Upvote times:",upvote
        for voter in voters:
            upvoter.append(voter.user_url())
            upgende.append(voter.get_gender())
            uid = voter.get_user_id()
            userids.append(uid)
            print len(upvoter),':',upvoter[-1]
    except:
        print "Error"

解决方案:
第902行修改为:

        data_aid = soup.find("div", class_="entry-body")["data-aid"]

验证码登录出错

raceback (most recent call last):
  File "auth.py", line 231, in <module>
    login()
  File "auth.py", line 214, in login
    result = upload_form(form_data)
  File "auth.py", line 137, in upload_form
    r = requests.post(url, data=form, headers=headers)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 497, in post
    return self.request('POST', url, data=data, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 455, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 558, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 378, in sendraise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='www.zhihu.com', port=80): Max retries exceeded with url: /login/email (Caused by <class 'socket.error'>: [Errno 104] Connection reset by peer)

question.get_top_i_answers() 和 question.get_all_answers() 获取答案失败

question.get_top_i_answers() 和 question.get_all_answers() 都只能获得10 个回答了,测试了几个问题,包括test 中的 http://www.zhihu.com/question/24269892

`url = "http://www.zhihu.com/question/24269892"

question = Question(url)

print question.get_answers_num()

q=question.get_top_i_answers(20)
for i in q:
print i`

`<zhihu.Answer instance at 0x10441a1b8>
<zhihu.Answer instance at 0x115b378c0>
<zhihu.Answer instance at 0x1177319e0>
<zhihu.Answer instance at 0x1150dab00>
<zhihu.Answer instance at 0x117833b90>
<zhihu.Answer instance at 0x11587d368>
<zhihu.Answer instance at 0x1159a6e18>
<zhihu.Answer instance at 0x11698bf80>
<zhihu.Answer instance at 0x115614c68>

<zhihu.Answer instance at 0x1174d1170>

IndexError Traceback (most recent call last)
in ()
4 print question.get_answers_num()
5 q=question.get_top_i_answers(20)
----> 6 for i in q:
7 print i

/Users/traveltao/Desktop/zhihu-python-master/zhihu.py in get_top_i_answers(self, n)
460 j = 0
461 answers = self.get_all_answers()
--> 462 for answer in answers:
463 j = j + 1
464 if j > n:

/Users/traveltao/Desktop/zhihu-python-master/zhihu.py in get_all_answers(self)
342
343 is_my_answer = False
--> 344 if soup.find_all("div", class_="zm-item-answer")[j].find("span", class_="count") == None:
345 my_answer_count += 1
346 is_my_answer = True

IndexError: list index out of range `

验证码不正确

大大你好,我在执行auth.py的时候按图片输入验证码后一直提示验证码错误,是知乎改验证方式了吗

登录模块用requests中的Session()来做应该会更方便

个人建议,登录可以用requests.Session()做,这样都不必输入验证码,还是挺方便的
_xsrf 可以在登录页面中解析出来
伪代码:
s = requests.Session()
post_data = {'username':'','password':''}
post_data['_xsrf'] = _xsrf
post_data['remember_me'] = 'true'
login_rspn = self.s.post(LOGIN_URL,headers=HEADERS,data=post_data,timeout=10,verify=False)

之后用s中就会保存登录信息了
用s.get()发情求就行

网络异常

用户失效后重新登录报错:

WARN:网络故障
INFO: 正在加载配置文件 ...
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/��Ӱ/���ݽṹ���㷨/auth.py", line 241, in
login()
File "C:/Users/Administrator/PycharmProjects/��Ӱ/���ݽṹ���㷨/auth.py", line 213, in login
form_data = build_form(account, password)
File "C:/Users/Administrator/PycharmProjects/��Ӱ/���ݽṹ���㷨/auth.py", line 115, in build_form
form['_xsrf'] = search_xsrf()
File "C:/Users/Administrator/PycharmProjects/��Ӱ/���ݽṹ���㷨/auth.py", line 101, in search_xsrf
raise NetworkError(u"验证码请求失败")
main.NetworkError
ERROR: 网络异常

这个是网络异常还是登录失败了

get_topic出现列表越界

line 878, in get_topics
yield topic_list[j].find("strong").string.encode("utf-8")
IndexError: list index out of range

数组越界

seed =Question("https://www.zhihu.com/question/26746768")
allTheAnswers = [i for i in seed.get_all_answers()]
Traceback (most recent call last):
File "", line 1, in
File "zhihu.py", line 188, in get_all_answers
if soup.find_all("div", class_="zm-item-answer")[j].find("span", class_="count") == None:
IndexError: list index out of range

auth.py登录返回403错误

INFO: 正在加载配置文件 ...
INFO: 提取XSRF 代码失败
INFO: 正在调用外部程序渲染验证码 ...
INFO: Command: xdg-open verify.gif &
请输入验证码: EPY3
ERROR: 网络异常

Traceback (most recent call last):
  File "auth.py", line 249, in <module>
    login()
  File "auth.py", line 228, in login
    result = upload_form(form_data)
  File "auth.py", line 146, in upload_form
    raise NetworkError(u"表单上传失败!")
__main__.NetworkError

我是根据配置文件登录,输入验证码后,这里一直返回403,另外我已经在auth.py中所有requests.get添加了headers.

加个获取用户关注的话题的功能行不?

加在user类里。。最好把我写的代码改一下再加进去,或者再加个topic类啥的
python
def get_topics_num(self):
if self.user_url == None:
print "I'm anonymous user."
return 0
else:
if self.soup == None:
self.parser()
soup = self.soup
try:
topics_num = soup.find_all("div", class_="zm-profile-side-section-title")[1].strong.string.encode("utf-8")
I=''
for i in topics_num:
if i.isdigit():
I=I+i
topics_num=int(I)
return topics_num
except:
print self.get_user_id()
return 0

def get_topics(self):
    if self.user_url == None:
        print "I'm anonymous user."
        return
    else:
        topics_num = self.get_topics_num()
        print topics_num
        if topics_num == 0:
            return ""
        else:
            for i in xrange((topics_num - 1) / 20 + 1):
                topics_url = self.user_url + "/topics"

                r = requests.get(topics_url)
                lovetopic=""
                soup = BeautifulSoup(r.content)
                for topics in soup.find_all("div", class_="zm-profile-section-item zg-clear"):
                    name =topics.find("strong").string.encode("utf-8")
                    lovetopic=lovetopic+name+"|"
                return lovetopic

使用生成器的时候报错

yield User(user_url_list[j].a["href"], user_url_list[j].a.string.encode("utf-8")) IndexError: list index out of range

answer类中的get_content函数无法返回

获取指定用户的所有答案,get_upvote()正常,但进入get_content()函数之后就在里面死循环了
单步发现是在beautifulsoup里面find_all函数里面出不来
image

另外运行脚本时会出现这样的警告
image

环境是虚拟机上的ubuntu14.04 python2.7.6, 请问这可能是什么问题呢?谢谢!

get_all_answers 方法仍然出现数组越界错误

qid = '27099248'
q = Question('https://www.zhihu.com/question/'+qid)
A = [i for i in q.get_all_answers()]

这个bug并不是对每个问题都出现,只有少部分,比如上面这个qid,才会出现

256 soup = BeautifulSoup(self.soup.encode("utf-8"))
257 print "j",j
--> 258 answer_soup = BeautifulSoup(answer_list[j])
259
260 if answer_soup.find("div", class_="zm-editable-content clearfix") == None:

IndexError: list index out of range

我对于258行前后加了输出来观察,发现在i=1时,answer_list长度只有16,而min(answers_num - i * 20, 20) =20,所以越界了

看起来像是soap没有能取回剩下的答案。
如果将for j in xrange(min(answers_num - i * 20, 20)): 改为 for j in xrange(len(answer_list)):

那么i=1这一个循环可以通过,
但i=2时 answer_list长度就是0

Some changes to get test.py working

Hi,
First of all, really appreciate for all the effort to make such a fantastic python crawl for ZhiHu.
But there are some error when I tried to run test.py after cloned.
I made the following to changes to get it to work.

  1. in auth.py,
    def islogin():
    url = "http://www.zhihu.com/settings/profile"
    -- change to
    url = "https://www.zhihu.com/settings/profile"
  2. I think zhihu change some html tag : in zhihu.py
    change from
    soup.find("h3", class_="zm-item-answer-author-wrap")
    to
    soup.find("div", class_="zm-item-answer-author-info")
  3. change class user
    from
    elif user_url[0:28] != "https://www.zhihu.com/people/"
    to
    elif user_url.startswith('www.zhihu.com/people', user_url.index('//')+2) == False

Then everything works fine.

Thanks again for such a brilliant work

Cheers.

auth.py 登录出错。

一开始登录时,发现一直报错:
SUCCES: 登录失败!
WARN: unknown error.

打印具体错误信息为:
{
'error': {
'message': None,
'code': 100003,
'data': {
u'account': u'\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u90ae\u7bb1'
#请输入正确的邮箱
}
}
}
经浏览器确认登录,邮箱密码没有问题。
当对应邮箱的密码输错时,同样报上面的错误,很奇怪。

爬取用户回答,如果遇到用户某回答被和谐,爬虫自动终止,不能自动跳过

File "run.py", line 7, in
answer.to_txt()
File "/Users/zhanghe/PycharmProjects/spider/zhihu-python/zhihu.py", line 795, in to_txt
content = self.get_content()
File "/Users/zhanghe/PycharmProjects/spider/zhihu-python/zhihu.py", line 779, in get_content
soup.body.append(answer)
File "/Users/zhanghe/PycharmProjects/spider/venv/lib/python2.7/site-packages/bs4/element.py", line 366, in append
self.insert(len(self.contents), tag)
File "/Users/zhanghe/PycharmProjects/spider/venv/lib/python2.7/site-packages/bs4/element.py", line 300, in insert
raise ValueError("Cannot insert None into a tag.")
ValueError: Cannot insert None into a tag.

User的get_followers()

好像知乎服务器限制offset为一万以内?超出一万直接返回空,建议代码里做下限制

windows下打开验证码出错

auth.py 96行 os.system("open %s &" % image_name )

应该改成os.system(" %s " % image_name )

windows下直接输入文件名就会以默认程序打开

auth.py登录一直返回500错误

`def search_xsrf():
"""

:rtype: object
"""
url = "http://www.zhihu.com/"
r = requests.get(url, verify=False)
if int(r.status_code) != 200:
    raise NetworkError(u"验证码请求失败")`

这里一直返回500,错误就是验证码请求失败

登录失败

我在试用这个程序的时候,在config.ini里输入了自己的邮箱和密码,但是为什么总是显示登录失败?

获取关注人数的时候脚本会自动停止

大概在获取 800 多名用户之后,脚本就会自动停止,也没有报错,后台运行状态似乎是正常的:

root 10371 0.9 10.4 273236 52232 ? Sl 09:35 6:23 python my_programe.py

报错怎么解决?

执行 pip install requests 时,报错:

root@iZ23totlue9Z:~/mine/zhihu-python# pip install requests
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 246, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 342, in run
    requirement_set.prepare_files(finder)
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 345, in prepare_files
    functools.partial(self._prepare_file, finder))
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 290, in _walk_req_to_install
    more_reqs = handler(req_to_install)
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 415, in _prepare_file
    req_to_install, finder)
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 366, in _check_skip_installed
    req_to_install.check_if_exists()
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 986, in check_if_exists
    self.satisfied_by = pkg_resources.get_distribution(self.req)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 533, in get_distribution
    dist = get_provider(dist)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 413, in get_provider
    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 934, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 811, in resolve
    env = Environment(self.entries)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 991, in __init__
    self.scan(search_path)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 1021, in scan
    self.add(dist)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 1037, in add
    if self.can_add(dist) and dist.has_version():
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2742, in has_version
    self.version
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2550, in version
    for line in self._get_metadata(self.PKG_INFO):
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2594, in _get_metadata
    for line in self.get_metadata_lines(name):
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 1990, in get_metadata_lines
    return yield_lines(self.get_metadata(name))
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 1984, in get_metadata
    with open(self.path,'rU') as f:
IOError: [Errno 2] No such file or directory: '/usr/lib/python2.7/dist-packages/setuptools.egg-info'

user.get_followers_num() NoneType error

我试着用了你们的API获取follow我的知乎人的followers 人数 大部分都运行挺好的 但爬有些人时候 会出现如下错误 我看get_followers_num的原码。。觉得没问题啊 不是很理解

Error in get_followers_num
followers_num = int(soup.find("div", class_="zm-profile-side-following zg-clear")
AttributeError: 'NoneType' object has no attribute 'find_all'

代码如下

if __name__ == '__main__':

    user_url = "https://www.zhihu.com/people/BravoMaooo"
    user = User(user_url)
    user.get_followers_num()
    followers = user.get_followers()
    for follower in followers:
        try:
            print(follower.get_followers_num())
        except Exception:
            print('there is an error')
            print(Exception)
            print(follower.get_user_id())

那个出错用户的知乎链接 https://www.zhihu.com/people/KellenWang

谢谢指教

获取一个用户所有答案时写文件报错!

我在获取某个用户答案时,发现如果该问题描述中含有反斜杠 /,写文件时就会报错!
f = open(os.path.join(os.path.join(os.getcwd(), "text"), file_name), "wt")
IOError: [Errno 2] No such file or directory: '/home/liutong/zhihu-python/text/\xe6\x9c\x8d\xe7\x94\xa8\xe6\x8a\x97\xe6\x8a\x91\xe9\x83\x81\xe8\x8d\xaf/\xe6\x8a\x97\xe7\x84\xa6\xe8\x99\x91\xe8\x8d\xaf\xe6\x98\xaf\xe4\xbb\x80\xe4\xb9\x88\xe4\xbd\x93\xe9\xaa\x8c\xef\xbc\x9f\xe5\x96\xb5\xe5\x96\xb5\xe4\xb9\x88\xe4\xb9\x88\xe4\xb9\x88\xe7\x9a\x84\xe5\x9b\x9e\xe7\xad\x94.txt'
我的系统是ubuntu 14.04

输入密码不正确时,显示unknow error

当输入的密码不正确的时候,显示

SUCCES: 登录失败 !
WARN: unknow error.

此时,提交表单的返回值为:

{
“r": 1,
"errcode": 100005,
"data" : {"password": incorrect_password}
"msg": null
}

登录失败...

@egrcc 同样的环境(ubuntu14.04 python2.76 firefox),用户名密码cookies都写了但是怎么都是Login Failed 请填写验证码。。

Json decode失败---ayth.py

142 行的 result = r.json() 改成:

body = r.content
print body
result = json.loads(body)

可以正常登陆。
78jph ve ckmmaxo4034wro

爬下来了,但还是会报错

这回应该不是我安装的问题啦

from zhihu import Question

url = "http://www.zhihu.com/question/29862735"
question = Question(url)
answers = question.get_all_answers()
for answer in answers:
    answer.to_txt()
    answer.to_md()
root@AY1407131602375Z:~/zhihu-python# python test001.py
Login Failed, reason is:
请填写验证码
Use cookies
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--喻长大的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--喻长大的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--海天的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--海天的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--mu peng的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--mu peng的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--desire caution的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--desire caution的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--清风浅的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--清风浅的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--吴名士的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--吴名士的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--程啸的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--程啸的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--meggie huo的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--meggie huo的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--左牵黄右擎苍的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--左牵黄右擎苍的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--张赞的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--张赞的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--卢百万的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--卢百万的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Jack Nee的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Jack Nee的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--张萌萌blingbling的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--张萌萌blingbling的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--章子晏的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--章子晏的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--鱼吞舟的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--鱼吞舟的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--王粤北的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--王粤北的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--苏昕的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--苏昕的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--William的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--William的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--姜委员长的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--姜委员长的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Richard L的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Richard L的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--周如南的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--周如南的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--此人已失控的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--此人已失控的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--山羊月的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--山羊月的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--路加的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--路加的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--姚泽云的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--姚泽云的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--零崎月光的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--零崎月光的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--胡杨的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--胡杨的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--周大明白的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--周大明白的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--送赞干不的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--送赞干不的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--废了完了算了的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--废了完了算了的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--飞面福音的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--飞面福音的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--克里斯的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--克里斯的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--杨怀斌的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--杨怀斌的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Roland Xu的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Roland Xu的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--很卡的哇伊叔的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--很卡的哇伊叔的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--于经文的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--于经文的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--你们啊就想的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--你们啊就想的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--匿名用户的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--匿名用户的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--yoco的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--yoco的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--云宇的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--云宇的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--富丽的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--富丽的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--凤红邪的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--凤红邪的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--李炜的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--李炜的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--匿名用户的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--匿名用户的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Parasession的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Parasession的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--海小呆的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--海小呆的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Chinito超强的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Chinito超强的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Rice Naomi的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--Rice Naomi的回答.md
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--黄武鹏的回答.txt
为什么没看见神和神迹,还会有 20 亿基督徒,近 40 亿人信仰上帝?--黄武鹏的回答.md
Traceback (most recent call last):
  File "test001.py", line 6, in <module>
    for answer in answers:
  File "/root/zhihu-python/zhihu.py", line 248, in get_all_answers
    answer = soup.find_all("div", class_=" zm-editable-content clearfix")[j]
IndexError: list index out of range

Answer.get_question()失败

错误报告如下,应该是知乎换了格式了
Traceback (most recent call last):
File "./crawl.py", line 19, in
print "\nQuestion " + ": " + answer.get_question().get_title() + "\n"
File "filepath/zhihu.py", line 1070, in get_question
question_link = soup.find("h2", class_="zm-item-title zm-editable-content").a
AttributeError: 'NoneType' object has no attribute 'a'

获取点赞人数的问题

似乎是一个bug,请您再确认一下。获取点赞人数失败,或者数字不对。

运行test.py

1。 如果某问题下只有一个回答,则
upvote = answer.get_upvote() 运行失败,报错。

比如说 answer_url = "https://www.zhihu.com/question/38214680/answer/79481584" ,
报错信息:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
File "test.py", line 79, in answer_test
upvote = answer.get_upvote()
File "~/zhihu-python-master/zhihu.py", line 757, in get_upvote
count = soup.find("span", class_="count").string
AttributeError: 'NoneType' object has no attribute 'string'
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2。 如果该问题下有多个回答,则获得的赞数不是这个回答的,而是紧挨着它的下一个回答的。

比如,answer_url = "https://www.zhihu.com/question/33567660/answer/79138286"

结果输出:
++++++++++++++++++++++++++++++++++++++++++++
**为什么不拍一部《伟大的抗日战争》呢?--石头布的回答.txt
**为什么不拍一部《伟大的抗日战争》呢?--石头布的回答.md
<zhihu.Question instance at 0x17fc950>
**为什么不拍一部《伟大的抗日战争》呢?
<zhihu.User instance at 0xbdfc68>
<generator object get_voters at 0xbde0f0>
石头布
529 <---- 是下一个回答的赞数。
14537
++++++++++++++++++++++++++++++++++++++++++++
其中 529 是下一个回答的赞数。

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.