我不熟悉API,也不熟悉JSON,希望能在这里得到一些帮助
我知道我想要完成的每件事都可以用PRAW库来完成,但我正在努力在没有PRAW的情况下找出答案
我有一个for循环,它从一个特定的子Reddit中提取文章标题,将所有的文章标题输入到一个pandas数据帧中,在达到限制后,将‘after
参数更改为最后一个文章id,以便在下一批中重复
一切都很完美,但当我在一个特定线程中尝试相同的技术并收集注释时,‘after’
参数无法抓取下一批
我假设‘after’
在线程中的工作方式与在子Reddits帖子中的工作方式不同。我在JSON中看到了一个ID列表。我需要用这个吗?当我查看线程的JSON时,‘after’
表示‘none’
,即使使用了更新的参数
你知道我需要改变什么吗?这可能很简单
获取限制为5的subreddit帖子的工作代码:
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
的列表。它是一个嵌套树,如下所示:使用get请求时,您将使用以下url和格式
requests.get(https://oauth.reddit.com/api/morechildren/.json?api_type=json&link_id=t3_lgrc39&children=gmt20i4,gmuram8....etc)
相关问题 更多 >
编程相关推荐