首页 > 解决方案 > 使用 Python Requests 库将 Cookie 请求为 JSON,以便格式化为 DataFrame

问题描述

我正在尝试使用 Python 请求使用 POST 请求和 JSON 请求参数从网站检索 cookie。

我正在使用 KNIME,它允许您将响应输出为 DataFrame。当我请求 cookie 并尝试使用以下代码将其作为 DataFrame 输出时:

from pandas import DataFrame
import requests

session = requests.Session()

url = "https://api.danmurphys.com.au/apis/ui/Address/SetFavouriteStore"
payload = {"StoreNo":"1276"}

x = session.post(url, json=payload)

output_table = DataFrame(x.cookies)

,我收到以下错误:

Execute failed: No serializer extension having the id or processing python type "http.cookiejar.Cookie" could be found.
Unsupported column type in column: "0", column type: "<class 'http.cookiejar.Cookie'>".

我知道如果响应是 JSON,DataFrame 输出函数会起作用,所以我尝试了以下代码:

x = session.post(url, json=payload)
res = session.cookies.get_dict()

output_table = DataFrame(res)

但这会产生以下错误:

ValueError: If using all scalar values, you must pass an index

如果有人知道如何为 DataFrame 格式化这些 cookie,或者我应该使用不同的库来请求,请通知我。谢谢。

编辑:使用以下 DataFrame 构造函数:

output_table = DataFrame(data=session.cookies.get_dict(), index=session.cookies.get_dict(), columns=None, dtype=None, copy=False)

成功输出格式化为 DataFrame 的 cookie,但值跨行和列复制,如屏幕截图所示。在此处输入图像描述

标签: pythondataframecookiespython-requestshttp-post

解决方案


由于 ValueError 指向使用索引传递所有标量值,因此您可以这样做:

from pandas import DataFrame
import requests

session = requests.Session()

url = "https://api.danmurphys.com.au/apis/ui/Address/SetFavouriteStore"
payload = {"StoreNo":"1276"}

x = session.post(url, json=payload)
res = session.cookies.get_dict()
output_table = DataFrame({'data':res})#pass res as a dictionary value

推荐阅读