检索Reddit上一个线程的所有评论



我不熟悉API和JSON,希望这里有一些帮助。

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

我有一个for循环,从特定的subreddit中提取帖子标题,将所有帖子标题输入到pandas数据框架中,并在达到限制后,将‘after参数更改为最后一个帖子id,以便它与下一批重复。

一切都工作得很好,但是当我对一个特定的线程尝试同样的技术并收集评论时,‘after’参数不能抓取下一批。

我假设‘after’与线程的工作方式不同,而不是与子reddits帖子。我在JSON‘more’中看到了一个id列表。我需要用这个吗?当我查看线程的JSON时,即使更新了参数,‘after’也显示‘none’

你知道我这里需要改变什么吗?可能是一些简单的东西。

获取subreddit帖子限制5的工作代码:

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。而且,它只是重新启动,而不是更新'after'参数。

我最终想出了怎么做。阅读Reddit的API文档,当在一个线程中,你想拉更多的评论,你必须从JSON中的more部分编译一个id的列表。它是一个嵌套的树,看起来像这样:

{'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和格式

requests.get(https://oauth.reddit.com/api/morechildren/.json?api_type=json&link_id=t3_lgrc39&children=gmt20i4,gmuram8....etc)

最新更新