首页 > 解决方案 > 使用 Python 中的请求方法从多页网站下载数据

问题描述

我有网站http://json-homework.task-sss.krasilnikov.spb.ru/docs/9f66a575a6cfaaf7e43177317461d057的 API 文档(不幸的是,这只是俄语,但我会尝试解释),我是从那里导入有关组成员的数据,但问题是该参数page仅返回 5 个成员,并且当您增加页码时,它仅返回接下来的 5 个成员,而不是将它们添加到前五个成员中。这是我的代码:

import pandas as pd
import requests as rq
import json
from pandas.io.json import json_normalize
url='http://json-homework.task-sss.krasilnikov.spb.ru/api/groups/getmembers?api_key=9f66a575a6cfaaf7e43177317461d057&group_id=4508123&page=1'
data=rq.get(url)
data1=json.loads(data.text)
data1=json_normalize(json.loads(data.text)["response"])
data1

这是我的输出的样子:我的输出

通过输入越来越大的数字,我还发现最后一部分数据存在于41页,即我需要从1到41页获取数据。如何在我的代码中包含所有页面?也许有一些循环或类似的东西是可能的,我不知道......

标签: jsonpython-3.xparametersgetpython-requests

解决方案


根据 API 文档,没有参数来指定要在一个页面中获取的用户,因此您必须一次获取 5 个用户,并且由于有 41 个页面,您可以循环浏览 url。

import requests as rq
import json

all_users = []
for page in range(1,42):
    url=f'http://json-homework.task-sss.krasilnikov.spb.ru/api/groups/getmembers?api_key=9f66a575a6cfaaf7e43177317461d057&group_id=4508123&page={page}'
    data=rq.get(url)
    all_users.append(json.loads(data.text)["response"])

上述实现当然不会检查任何 api 限制,即如果在很短的时间内发出太多请求,API 可能会提供意外数据,您可以使用一些适当的延迟来缓解这种情况。


推荐阅读