【问题标题】:how to use python requests get all of the response?如何使用python请求获取所有响应?
【发布时间】:2016-04-10 06:47:50
【问题描述】:

使用此代码

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:

from pandas.io.json import json_normalize
df1 = df['body']
df_final = json_normalize(df1['result'],'goodsList')

我怎样才能将所有响应都放到一个数据帧中?

【问题讨论】:

  • 你的问题我很不清楚,请多解释

标签: python pandas python-requests


【解决方案1】:

似乎不可能在一页上获得所有响应。这是你无法控制的,只有做网站的人才能控制。

但是,您可以做的是遍历搜索结果的页面并将它们添加到一起。我注意到您有一个 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

【讨论】:

  • 您得到的 json 非常混乱 - 大量数据不是表格格式(这就是数据框的样子)。这取决于您要保存的数据以及您想要的数据框结构
猜你喜欢
  • 2021-12-25
  • 2016-03-21
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多