为了账号安全,请及时绑定邮箱和手机立即绑定

哪些 praw 命令需要网络请求?

哪些 praw 命令需要网络请求?

至尊宝的传说 2022-08-25 13:47:47
我是对的,这个代码的每一行只发出一个请求?sm = reddit.submission(url="...")sm.comment_sort = 'top'sm.comments.replace_more(1)comments = sm.comments.list()我知道Reddit api在每600秒时间段内提供600个请求。我需要此信息才能更有效地使用 api。
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

此代码段发出两个请求。首先,当您在第 3 行访问时,它会从 Reddit API 加载提交的评论。然后,在同一行上,调用将只替换一个对象,这会发出额外的请求。sm.commentsreplace_more(1)MoreComments


要确定某些 PRAW 代码发出的网络请求数,请查看日志记录文档中的部分。将该网页中的此代码段添加到脚本顶部:


import logging


handler = logging.StreamHandler()

handler.setLevel(logging.DEBUG)

logger = logging.getLogger('prawcore')

logger.setLevel(logging.DEBUG)

logger.addHandler(handler)

然后,在运行脚本时,你将看到描述所发出的每个请求的调试输出。对于您的代码段,我的输出如下所示:


Fetching: GET https://oauth.reddit.com/comments/fgi5bd/

Data: None

Params: {'limit': 2048, 'sort': 'top', 'raw_json': 1}

Response: 200 (116926 bytes)

Fetching: POST https://oauth.reddit.com/api/morechildren/

Data: [('api_type', 'json'), ('children', 'fk5u680,fk5tgxt,<--snip-->,fk5u67w,fk5ug3f'), ('link_id', 't3_fgi5bd'), ('sort', 'top')]

Params: {'raw_json': 1}

Sleeping: 0.21 seconds prior to call

Response: 200 (32753 bytes)

以“Fetching”开头的每一行都是另一个网络请求,后续行进一步描述了该请求。


框架挑战

你说


我知道Reddit api在每600秒时间段内提供600个请求。我需要此信息才能更有效地使用 api。


虽然我不能确切地知道你所说的“更有效地使用api”是什么意思,但如果你担心你会超过速率限制,你根本不需要担心这一点。PRAW 的一个关键功能是它为您处理速率限制,确保您在不违反速率限制的情况下尽可能频繁地发出请求。


查看完整回答
反对 回复 2022-08-25
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信