当前位置: 首页 > 知识库问答 >
问题:

从Reddit上的线程中检索所有评论

刘和昶
2023-03-14

我是API的新手,正在使用JSON,希望在这里得到一些帮助。

我知道我想要完成的所有事情都可以使用PRAW库来完成,但我试图在没有PRAW的情况下弄清楚。

我有一个for循环,它从一个特定的子编辑中提取文章标题,将所有的文章标题输入到一个pandas数据帧中,在达到限制后,将< code >‘after 参数更改为最后一个文章id,以便在下一批中重复。

一切都很完美,但是当我对特定线程尝试相同的技术并收集注释时,“after”参数无法获取下一批。

我假设“之后”与子reddits帖子的工作方式不同。我在JSON中看到“更多”,其中包含ID列表。我需要以某种方式使用它吗?当我查看线程的 JSON 时,“after”表示“无”,即使使用更新的参数也是如此。

关于我需要在这里改变什么的任何想法?这可能很简单。

用于获取限制为 5 的子reddit帖子的工作代码:

params = {"t":"day","limit":5}
for i in range(2):
    response = requests.get('https://oauth.reddit.com/r/stocks/new',
                            headers=headers, params = params)
    response = response.json()
    for post in response['data']['children']:
        name = post['data']['name']
        print('name',name)
    params['after'] = name
    print(params)

给出输出:

name t3_lifixn
name t3_lifg68
name t3_lif6u2
name t3_lif5o2
name t3_lif3cm
{'t': 'day', 'limit': 5, 'after': 't3_lif3cm'}
name t3_lif26d
name t3_lievhr
name t3_liev9i
name t3_liepud
name t3_lie41e
{'t': 'day', 'limit': 5, 'after': 't3_lie41e'}

限制为10的Reddit线程的代码

params = {"limit":10}
for i in range(2):
    response = requests.get('https://oauth.reddit.com/r/wallstreetbets/comments/lgrc39/',
                            params = params,headers=headers)
    response = response.json()
    for post in response[1]['data']['children']:
        name = post['data']['name']
        print(name)
    params['after'] = name
    print(params)

给出输出:

t1_gmt20i4
t1_gmzo4xw
t1_gmzjofk
t1_gmzjkcy
t1_gmtotfl
{'limit': 10, 'after': 't1_gmtotfl'}
t1_gmt20i4
t1_gmzo4xw
t1_gmzjofk
t1_gmzjkcy
t1_gmtotfl
{'limit': 10, 'after': 't1_gmtotfl'}

尽管限制设置为10,但它在继续循环之前只提供了5个id。此外,它并没有更新'under'参数,而是重新启动了。

共有1个答案

穆彬郁
2023-03-14

我最终想出了怎么做。阅读Reddit API的文档时,如果您在线程中想要获取更多注释,则必须从JSON的more部分编译id's列表。它是一个嵌套树,如下所示:

{'kind': 'more', 'data': {'count': 161, 'name': 't1_gmuram8', 'id': 'gmuram8', 'parent_id': 't1_gmt20i4', 'depth': 1, 'children': ['gmuram8', 'gmt6mf6', 'gmubxmr', 'gmt63gl', 'gmutw5j', 'gmtpitn', 'gmtoec3', 'gmtnel0', 'gmt4p79', 'gmupqhx', 'gmv70rm', 'gmtu2sj', 'gmt2vc7', 'gmtmjai', 'gmtje0b', 'gmtkzzj', 'gmt93n5', 'gmtvsqa', 'gmumhat', 'gmuj73q', 'gmtor7c', 'gmuqcwv', 'gmt3lxe', 'gmt4l78', 'gmum9cm', 'gmt857f', 'gmtjrz3', 'gmu0qcl', 'gmt9t9i', 'gmt8jc7', 'gmurron', 'gmt3ysv', 'gmt6neb', 'gmt4v3x', 'gmtoi6t']}}

当使用get请求时,您将使用以下url和格式

请求(https://oauth.reddit.com/api/morechildren/.json?api_type=json

 类似资料:
  • 今天好,这有点让我迷惑(大脑冻结!)好像少了些什么。有一个我用HashMap填充的ArrayList。现在我放入了我的HashMap和ArrayList。 由于am解析JSON,arraylist的大小显著增加。现在我的问题是如何从ArrayList中的两个映射键中获得值?我试过这个 但我似乎不能得到所有的值。映射大小总是返回值2,这只是元素。如何从ArrayList中的映射键获取所有值?谢谢

  • 我正试图搞乱一个程序,它会登录reddit帐户,并在线程上发表评论。到目前为止,这是我的登录代码: 这确实有效——它报告成功登录,并存储modhash。 对于发表评论,我有: 虽然,当我尝试发送评论时,它告诉我需要登录才能执行此操作。我知道我必须发送reddit_session cookie才能发表评论,但我不知道我是否正确。

  • 我试图在一个旧的海军网页上抓取产品的URL。然而,它只是给出了产品列表的一部分,而不是全部(例如,当超过8个URL时,只给出8个URL)。我希望有人能帮我找出问题所在。

  • 问题内容: 我有以下代码,用于使用JSoup在Java中解析HTML。 问题是我只能检索首页搜索结果链接。我应该怎么做才能从Google搜索结果的其余页面获得链接。 问题答案: 如果要从第二页获得结果,请添加到URL。对于第三页使用,依此类推。

  • 我需要做的是能够停止从一个实现runnable的线程类运行的所有线程。这就是我的意思:这里是我的“线程”类的开始: 这就是我如何创建多个线程来执行此操作: m是要创建的线程数。这可能是从50到1000的任何地方。现在我需要做的是突然立刻停止所有的动作。我该怎么做呢?

  • 问题内容: 从ElasticSearch获取某个索引的所有_id的最快方法是什么?使用简单的查询是否可能?我的索引之一包含大约20,000个文档。 问题答案: 编辑:请也阅读@Aleck Landgraf的答案 您只想要elasticsearch-internal 字段吗?还是文档中的字段? 对于前者,请尝试 Note 2017更新: 该帖子最初包含在内,但此后名称已更改,并且是新值。 结果将仅包