【问题标题】:Downloading data from multiple-pages website with requests method in Python使用 Python 中的请求方法从多页网站下载数据
【发布时间】:2020-02-29 10:54:53
【问题描述】:

我有 http://json-homework.task-sss.krasilnikov.spb.ru/docs/9f66a575a6cfaaf7e43177317461d057 网站的 API 文档(不幸的是,它只有俄语,但我会尝试解释),我要从那里导入有关组成员的数据,但问题是那个参数page只返回5个成员,当你增加页码时,它只返回接下来的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页获取数据。如何在我的代码中包含所有页面?也许有一些循环或类似的东西是可能的,我不知道......

【问题讨论】:

    标签: json python-3.x parameters get python-requests


    【解决方案1】:

    根据 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 可能会提供意外数据,您可以使用一些适当的延迟来缓解这种情况。

    【讨论】:

    • 我现在收到此错误“JSONDecodeError: Expecting value: line 1 column 1 (char 0)”...
    • 用这个all_users = all_users + json.loads(data.text)["response"]替换我代码中的最后一行,然后你可以运行all_usersjson_normalize
    • 哦,它仍然在这一行给我这个错误all_users = all_users + json.loads(data.text)
    • 我运行了上面的代码,它运行良好。您可以在循环中打印data.text 并检查您是否获得了有效的json 作为字符串?还有你用的是什么python版本?
    • 这是我的json_normalize(all_users) ``` id first_name last_name 0 212442289 Darya Glazova 1 303958499 Alexey Kim 2 51058438 Masha Isaeva 3 97510651 Pavel Kuznitsyn 4 175877310 Irina Prokopyeva 的输出。...... ... 198 263149712 Fyodor Osipov 199 169412107 Maria Frank 200 68937678 Denis Yurchenko 201 172735591 Sasha Zavyalova 202 375195548 Sofia Tarasova [203 行 x 3 列]```
    猜你喜欢
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多