如何使用python请求获取所有响应?

2024-06-28 20:19:31 发布

您现在位置:Python中文网/ 问答频道 /正文

用这个代码

import pandas as pd
import requests

link = "http://sp.kaola.com/api/category/goods?pageNo=1&pageSize=20&search=%7B%0A%20%20%22sortType%22%20%3A%20%7B%0A%20%20%20%20%22type%22%20%3A%200%0A%20%20%7D%2C%0A%20%20%22isNavigation%22%20%3A%20%220%22%2C%0A%20%20%22filterTypeList%22%20%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22id%22%20%3A%20%5B%0A%20%20%20%20%20%20%20%204055%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%22type%22%20%3A%201%2C%0A%20%20%20%20%20%20%22category%22%20%3A%20%7B%0A%20%20%20%20%20%20%20%20%22parentCategoryId%22%20%3A%200%2C%0A%20%20%20%20%20%20%20%20%22categoryId%22%20%3A%204055%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22source%22%20%3A%201%2C%0A%20%20%22noStoreCount%22%20%3A%200%2C%0A%20%20%22isActivity%22%20%3A%200%2C%0A%20%20%22storeCount%22%20%3A%2060%0A%7D"
df = reqeusts.get(link).json()
print df

我可以得到我正在查询的URL的响应。在

但是当url的get arg变为pageNo=3、4等时,如何从中获取数据呢? 我想在一个请求中从所有页面获得所有响应。如果可能的话?在

在每一页我可以得到20个答复。我怎么才能把它们都弄到手?在

更新:

我使用此方法清除json:

^{pr2}$

如何将所有的响应都放到一个数据帧中?在


Tags: 代码importcomjsonhttppandasdfget
1条回答
网友
1楼 · 发布于 2024-06-28 20:19:31

把所有的回答都写在一页纸上似乎是不可能的。这个网站只有你能控制的人才能控制。在

但是,你可以做的是循环搜索结果的页面,然后把它们加在一起。我注意到您有一个hasMore变量,它告诉您是否有更多的搜索结果。这是这样的:

import requests

link = "http://sp.kaola.com/api/category/goods?pageSize=20&search=%7B%0A%20%20%22sortType%22%20%3A%20%7B%0A%20%20%20%20%22type%22%20%3A%200%0A%20%20%7D%2C%0A%20%20%22isNavigation%22%20%3A%20%220%22%2C%0A%20%20%22filterTypeList%22%20%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22id%22%20%3A%20%5B%0A%20%20%20%20%20%20%20%204055%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%22type%22%20%3A%201%2C%0A%20%20%20%20%20%20%22category%22%20%3A%20%7B%0A%20%20%20%20%20%20%20%20%22parentCategoryId%22%20%3A%200%2C%0A%20%20%20%20%20%20%20%20%22categoryId%22%20%3A%204055%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22source%22%20%3A%201%2C%0A%20%20%22noStoreCount%22%20%3A%200%2C%0A%20%20%22isActivity%22%20%3A%200%2C%0A%20%20%22storeCount%22%20%3A%2060%0A%7D"
max_pages = 100
data = {}

for page_no in range(max_pages):
    try:
        req = reqeusts.get(link + "&pageNo=" + str(page_no))
    except reqeusts.ConnectionError:
        break # Stop loop if the url was not found.

    df = req.json()
    if df["body"]["result"]["hasMore"] == 0:
        break # Page says it has no more results

    # Here, add whatever data you want to save from df to data

相关问题 更多 >