繁体   English   中英

使用 Python 请求迭代具有未知页数的分页数据

[英]Iterating over paginated data with an unknown number of pages with Python requests

我正在尝试从使用分页的 URL 中获取数据。 我使用以下有效负载获取分页数据:

payload = {
'Pageno': '7',
'strCat': '-1',
'strPrevDate': '20220122',
'strScrip': '',
'strSearch': 'P',
'strToDate': '20220122',
'strType': 'C'}

我不知道那里有多少页。 我想一个一个地拿它们,直到我最终得到一个不存在的页面。 提取数据的代码如下:

jsonData = requests.get(url, headers=headers, params=payload).json()

如何确保我提出此请求以存在 URL 为条件?

URL 是:

url = 'https://api.bseindia.com/BseIndiaAPI/api/AnnGetData/w'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

对于 Pageno 的任何正值,BSE 的Pageno将返回 200 OK,即使您已经读过了数据的末尾。 您应该遍历每一页,然后在遇到空列表(这表明您已到达数据末尾)时中断。

import requests

payload = {
    'Pageno': 1,
    'strCat': '-1',
    'strPrevDate': '20220122',
    'strScrip': '',
    'strSearch': 'P',
    'strToDate':   '20220122',
    'strType': 'C'
}

url = 'https://api.bseindia.com/BseIndiaAPI/api/AnnGetData/w'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}

data = []
should_fetch_next_page = True
while should_fetch_next_page:
    print(f"Fetching page {payload['Pageno']} ...")
    jsonData = requests.get(url, headers=headers, params=payload).json()
    if jsonData["Table"]:
        data.extend(jsonData["Table"])
        payload['Pageno'] += 1
    else:
        should_fetch_next_page = False
        
print(data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM