温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Which praw commands need a network request?
praw python reddit

python - 哪些网络命令需要网络请求?

发布于 2020-05-27 12:01:40

我对这段代码的每一行仅发出一个请求是正确的吗?

sm = reddit.submission(url="...")
sm.comment_sort = 'top'
sm.comments.replace_more(1)
comments = sm.comments.list()

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

查看更多

提问者
F. Vosnim
被浏览
13
jarhill0 2020-03-11 10:34

该代码段提出了两个请求。首先,当您访问sm.comments第3行时,这将从Reddit API加载提交的注释。然后,在同一行上,调用replace_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)

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


框架挑战

你说

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

虽然我无法确切地知道“更有效地使用api”的含义,但是如果您担心会超出速率限制,则完全不必担心。PRAW的主要功能之一是为您处理速率限制,确保您在不违反速率限制的情况下尽可能频繁地发出请求。