json - 使用 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页获取数据。如何在我的代码中包含所有页面?也许有一些循环或类似的东西是可能的,我不知道......
解决方案
根据 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 可能会提供意外数据,您可以使用一些适当的延迟来缓解这种情况。
推荐阅读
- java - 如何将屏幕截图附加到由 azure devops 运行的 selenium 测试(maven、java 和 cucumber bdd)的测试报告中
- kotlin - MockInterceptor 以错误的格式返回内容
- swiftui - 在 tabview 中居中文本元素
- dropdown - 如何将数据库中的值添加到下拉列表?这是我的代码,其中的值不是取自 API
- javascript - 动态插入引导按钮
- javascript - 在 React Native 中浏览屏幕时显示活动指示器
- sql - 如何在 SQL Teradata 中计算具有舍入值的行?
- python - 如何在不等待用户回复的情况下创建一系列问题 discord.py
- dns - Certbot 错误:检查此域的 DNS 记录是否存在
- java - AndroidRuntime:致命异常:NullPointerException