【问题标题】:Python Requests to CSVPython 对 CSV 的请求
【发布时间】:2021-04-12 04:11:28
【问题描述】:

我一直在尝试将 JSON 请求 API 结果提取到 csv 中,但我很挣扎,

到目前为止,下面的代码在终端中返回值

import requests
import csv
import json
from pprint import pprint
import urllib
import pandas as pd

url = "https://esi.evetech.net/latest/markets/10000002/orders/?datasource=tranquility&order_type=all&page=1"

payload={}
headers = {}
r = {}

response = urllib.request.urlopen(url)

text = response.read()
json_data = json.loads(text)

pprint(json_data)
df = pd.read_json(r)
df.to_csv("output.csv")

但是,Pandas 向我返回了关于 Dictionary 类的错误信息? (抱歉,我对编码不是很熟悉)

最后一个问题是,在 url 变量中的 page=1 之后继续 url 请求的逻辑是什么? (order_type=all&page=1 ) 不知道系统有多少页

谢谢

【问题讨论】:

  • 您能否发布您遇到的问题的错误跟踪

标签: python pandas api url python-requests


【解决方案1】:

你已经完成了r = {},然后是df = pd.read_json(r),那么为什么会这样呢?

您可以执行以下任一操作:

# from your code, above
text = response.read()

# create DF from serialized JSON data (a string)
df = pd.read_json(text)

或者:

# from your code, above
text = response.read()
json_data = json.loads(text)

# create DF from loaded JSON data (in your case a list of dicts)
df = pd.DataFrame.from_records(json_data)

import urllib 应该是import urllib.request。或者只使用您已经导入的“请求”包。


第 2 部分:

要获取所有页面,请不断增加 page 的值,直到收到错误或空响应。 (在 SO 上提出多个不相关的问题是不好的形式。)请参阅 this answer for guidance 了解如何。

【讨论】:

  • 完美,结果让我感到困惑,因为我以前从未使用过 pandas - 对 page=1 有什么建议吗?
  • 顺便说一句,如果您对答案感到满意,"accept"
  • 已编辑。尝试使用提供的链接编写代码,或发布新问题。
【解决方案2】:

使用上面的代码可以重现该错误,并且看起来像urlib 库的一些编码错误。但我能够使用 python requests 模块成功加载数据

import requests
url = "https://esi.evetech.net/latest/markets/10000002/orders/datasource=tranquility&order_type=all&page=1"
response = requests.get(url)
data = response.text
df = pd.read_json(data)
df.to_csv("output.csv")

【讨论】:

  • 非常感谢 Justa!我现在正在尝试找出 page=1 的方法
猜你喜欢
  • 1970-01-01
  • 2016-05-24
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2015-01-20
相关资源
最近更新 更多