Skip to content

Commit cea9f4a

Browse files
committed
添加api
1 parent 96f54d2 commit cea9f4a

2 files changed

Lines changed: 251 additions & 7 deletions

File tree

README.rst

Lines changed: 245 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,14 +324,258 @@ Collection 代表一个收藏夹,处理收藏夹相关操作。创建一个 Co
324324
answer.to_txt()
325325
answer.to_md()
326326
327+
以上示例均可以在test.py文件中找到。
327328

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

330331

331332
API
332333
-------
333334

334-
有待添加
335+
zhihu.Question ---- 知乎问题操作类
336+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
337+
338+
class zhihu.Question(url, title = None)
339+
340+
Question 以 url 为唯一标识,创建一个 Question 对象实例必须传入一个代表知乎问题的 url (如: http://www.zhihu.com/question/26611428),需包含“http://”。如果传入的不是代表问题的 url ,程序会报错。通过调用 Question 类的一系列方法,获得该问题的一些信息。
341+
342+
Parameters:
343+
* url -- 该问题的链接,字符串
344+
* title -- 该问题的标题,字符串,可选
345+
346+
Returns: 一个 Question 实例对象
347+
348+
get_title()
349+
350+
得到该问题的标题。
351+
352+
Returns: 代表标题的字符串
353+
354+
get_detail()
355+
356+
得到该问题的详细描述。原问题的描述可能带有图片或视频,这里得到的是纯文字。
357+
358+
Returns: 代表详细描述的字符串
359+
360+
get_answers_num()
361+
362+
得到该问题的回答个数。
363+
364+
Returns: 代表回答个数的 int 型整数
365+
366+
get_followers_num()
367+
368+
得到关注该问题的人数。
369+
370+
Returns: 代表人数的 int 型整数
371+
372+
get_topics()
373+
374+
得到该问题所属的话题。
375+
376+
Returns: 一个 list ,每一个元素为代表一个话题的字符串
377+
378+
注:以后可能会添加一个 Topic 类,到时候每一个元素为代表一个话题的 Topic 类对象。
379+
380+
get_all_answers()
381+
382+
得到该问题的所有回答。
383+
384+
Returns: 包含所有答案的 generator 对象。其中每一个元素为代表一个答案的 Answer 对象
385+
386+
get_top_i_answers(n)
387+
388+
得到该问题的前 n 个回答。
389+
390+
Parameters: n -- int 型整数
391+
392+
Returns: 包含前 n 个答案的 generator 对象。其中每一个元素为代表一个答案的 Answer 对象
393+
394+
get_top_answer()
395+
396+
得到目前排名第一的回答。
397+
398+
Returns: 代表该答案的 Answer 对象
399+
400+
401+
zhihu.User ---- 知乎用户操作类
402+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
403+
404+
class zhihu.User(user_url, user_id = None)
405+
406+
User 以 url 为唯一标识,创建一个 User 对象实例必须传入一个代表知乎用户的 url (如: http://www.zhihu.com/people/egrcc),需包含“http://”。如果传入的不是代表用户的 url ,程序会报错。通过调用 User 类的一系列方法,获得该用户的一些信息。
407+
408+
Parameters:
409+
* user_url -- 该用户的链接,字符串
410+
* user_id -- 该用户的 ID ,字符串,可选
411+
412+
Returns: 一个 User 实例对象
413+
414+
get_user_id()
415+
416+
得到该用户的ID。
417+
418+
Returns: 代表 ID 的字符串
419+
420+
get_followees_num()
421+
422+
得到该用户关注的人的个数。
423+
424+
Returns: 代表人数的 int 型整数
425+
426+
get_followers_num()
427+
428+
得到关注该用户的人的个数。
429+
430+
Returns: 代表人数的 int 型整数
431+
432+
get_agree_num()
433+
434+
得到该用户获得的赞同数。
435+
436+
Returns: 代表赞同数的 int 型整数
437+
438+
get_thanks_num()
439+
440+
得到该用户获得的感谢数。
441+
442+
Returns: 代表感谢数的 int 型整数
443+
444+
get_asks_num()
445+
446+
得到该用户提问题的个数。
447+
448+
Returns: 代表问题数的 int 型整数
449+
450+
get_answers_num()
451+
452+
得到该用户回答问题的个数。
453+
454+
Returns: 代表问题数的 int 型整数
455+
456+
get_collections_num()
457+
458+
得到该用户收藏夹的个数。
459+
460+
Returns: 代表收藏夹数的 int 型整数
461+
462+
get_followees()
463+
464+
得到该用户关注的人。
465+
466+
Returns: 包含所有该用户关注的人的 generator 对象。其中每一个元素为代表一个用户的 User 对象
467+
468+
get_followers()
469+
470+
得到关注该用户的人。
471+
472+
Returns: 包含所有关注该用户的人的 generator 对象。其中每一个元素为代表一个用户的 User 对象
473+
474+
get_asks()
475+
476+
得到该用户提的所有问题。
477+
478+
Returns: 包含所有问题的 generator 对象。其中每一个元素为代表一个问题的 Question 对象
479+
480+
get_answers()
481+
482+
得到该用户回答的所有问题的答案。
483+
484+
Returns: 包含所有回答的 generator 对象。其中每一个元素为代表一个回答的 Answer 对象
485+
486+
get_collections()
487+
488+
得到该用户的所有收藏夹。
489+
490+
Returns: 包含所有收藏夹的 generator 对象。其中每一个元素为代表一个收藏夹的 Collection 对象
491+
492+
493+
zhihu.Answer ---- 知乎回答操作类
494+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
495+
496+
class zhihu.Answer(answer_url, question = None, author = None, upvote = None, content = None)
497+
498+
Answer 以 url 为唯一标识,创建一个 Answer 对象实例必须传入一个代表知乎回答的 url (如: http://www.zhihu.com/question/19878575/answer/14776495),需包含“http://”。如果传入的不是代表回答的 url ,程序会报错。通过调用 Answer 类的一系列方法,获得该回答的一些信息。一般不自己创建Answer对象。
499+
500+
Parameters:
501+
* answer_url -- 该答案的链接,字符串
502+
* question -- 该答案回答的问题, Question 对象,可选
503+
* author -- 该答案的作者, User 对象,可选
504+
* upvote -- 该答案获得的赞同数, int 型整数,可选
505+
* content -- 该答案的内容, BeautifulSoup 对象,可选
506+
507+
Returns: 一个 Answer 实例对象
508+
509+
get_question()
510+
511+
得到该答案回答的问题。
512+
513+
Returns: 一个 Question 对象
514+
515+
get_author()
516+
517+
得到该答案的作者 。
518+
519+
Returns: 一个 User 对象
520+
521+
get_upvote()
522+
523+
得到该答案获得的赞同数。
524+
525+
Returns: 一个 int 型整数
526+
527+
get_content()
528+
529+
得到该答案的内容。
530+
531+
Returns: 一个 BeautifulSoup 对象
532+
533+
to_txt()
534+
535+
将该答案转成txt文件,并会在当前目录下创建一个text文件夹,所生成的txt文件均保存在该文件夹。
536+
537+
to_md()
538+
539+
将该答案转成markdown文件,并会在当前目录下创建一个markdown文件夹,所生成的markdown文件均保存在该文件夹。
540+
541+
542+
zhihu.Collection ---- 知乎收藏夹操作类
543+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
544+
545+
class zhihu.Collection(url, name = None, creator = None)
546+
547+
Collection 以 url 为唯一标识,创建一个 Collection 对象实例必须传入一个代表知乎收藏夹的 url (如: http://www.zhihu.com/collection/27053469),需包含“http://”。如果传入的不是代表收藏夹的 url ,程序会报错。通过调用 Collection 类的一系列方法,获得该收藏夹的一些信息。
548+
549+
Parameters:
550+
* url -- 该收藏夹的链接,字符串
551+
* name -- 该收藏夹的名字,字符串,可选
552+
* creator -- 该收藏夹的创建者,User 对象,可选
553+
554+
Returns: 一个 Collection 实例对象
555+
556+
get_name()
557+
558+
得到该收藏夹的名字。
559+
560+
Returns: 代表名字的字符串
561+
562+
get_creator()
563+
564+
得到该收藏夹的创建者。
565+
566+
Returns:代表创建者 User 对象
567+
568+
get_all_answers()
569+
570+
得到该收藏夹收藏的所有回答。
571+
572+
Returns: 包含该收藏夹下所有回答的 generator 对象。其中每一个元素为代表一个回答的 Answer 对象
573+
574+
get_top_i_answers(n)
575+
576+
得到该收藏夹收藏的前 n 个回答。
577+
578+
Returns: 包含该收藏夹下前 n 个回答的 generator 对象。其中每一个元素为代表一个回答的 Answer 对象
335579

336580

337581

zhihu.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -259,14 +259,14 @@ def get_all_answers(self):
259259
answer = Answer(answer_url, self, author, upvote, content)
260260
yield answer
261261

262-
def get_top_i_answers(self, i):
263-
# if i > self.get_answers_num():
264-
# i = self.get_answers_num()
262+
def get_top_i_answers(self, n):
263+
# if n > self.get_answers_num():
264+
# n = self.get_answers_num()
265265
j = 0
266266
answers = self.get_all_answers()
267267
for answer in answers:
268268
j = j + 1
269-
if j > i:
269+
if j > n:
270270
break
271271
yield answer
272272

@@ -915,11 +915,11 @@ def get_all_answers(self):
915915
yield Answer(answer_url, question, author)
916916
i = i + 1
917917

918-
def get_top_i_answers(self, i):
918+
def get_top_i_answers(self, n):
919919
j = 0
920920
answers = self.get_all_answers()
921921
for answer in answers:
922922
j = j + 1
923-
if j > i:
923+
if j > n:
924924
break
925925
yield answer

0 commit comments

Comments
 (0)