我对这段代码的每一行仅发出一个请求是正确的吗?
sm = reddit.submission(url="...")
sm.comment_sort = 'top'
sm.comments.replace_more(1)
comments = sm.comments.list()
我知道Reddit api在每600秒的时间段内提供600个请求。我需要此信息才能更有效地使用api。
该代码段提出了两个请求。首先,当您访问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的主要功能之一是为您处理速率限制,确保您在不违反速率限制的情况下尽可能频繁地发出请求。
如果我在每600秒的时间段内有600个请求,并带有代码
reddit = praw.Reddit(...) sm = reddit.submission(url="...") sm.comment_sort = 'top' sm.comments.replace_more(597) comments = sm.comments.list()
。我可以limit=597
完全利用一个时间段而不需要第二个时间吗?由于您现有的代码发出2个请求,因此如果您调用
.replace_more(599)
,您总共将发出600个请求(在具有足够注释的线程上)。但是,我相信PRAW将尝试在600秒内尽可能均匀地分配600个请求。我仍然不完全了解您要如何使用速率限制。好的,谢谢你,jarhill0!