JSON,Url抓取,CSV转换,python
问题描述:
我想通过Url进行JSON抓取,并在Python中转换为CSV,但出现错误。请看下面。JSON,Url抓取,CSV转换,python
import requests
import pprint
import json
import csv
mysession = requests.Session()
url = 'https://shoiapi.xx.com/api/method/login'
data = {'usr': '@gmail.com', 'pwd': 'mh'}
ret=mysession.post(url, data=data)
response_data_json = ret.json()
print("---------------Post---------------------\n")
print(response_data_json)
stringOfJsonData = json.dumps(response_data_json)
tempf=open('test.csv', 'a')
f = csv.writer(tempf)
f.writerow(["home_page", "message", "full_name"])
pprint.pprint(stringOfJsonData)
for xin in stringOfJsonData:
f.writerow([xin["home_page"],xin["message"],xin["full_name"]
])
tempf.close()
print("---------------Out error---------------------\n")
Error i am geting
f.writerow([xin["home_page"],xin["message"],xin["full_name"]
TypeError: string indices must be integers
print("---------------Out error---------------------\n")
我正的误差: 我正的误差: 我正的错误: f.writerow([鑫[ “home_page”],辛[ “消息”],辛[” FULL_NAME“]
TypeError: string indices must be integers
答
如果没有有效的登录细节,这是不可能重现,但我会建议您切换到使用csv.DictWriter()
:
import requests
import pprint
import json
import csv
mysession = requests.Session()
url = 'https://shoaibapi.xxx.com/api/method/login'
data = {'usr': '[email protected]', 'pwd': 'xxx'}
ret = mysession.post(url, data=data)
with open('test.csv', 'w', newline='') as f_output:
csv_output = csv.DictWriter(f_output, fieldnames=['home_page', 'message', 'full_name'], extrasaction='ignore')
csv_output.writeheader()
csv_output.writerow(ret.json())
您将获得包含Test.csv
:
home_page,message,full_name
/desk,Logged In,shoaib shaikh
的DictWriter
是能够直接与字典条目工作。只需指定创建时所需的标题名称即可。如果JSON包含其他条目,则可以通过将extrasaction='ignore'
指定为参数来忽略这些条目。
您所做的调用仅返回单个条目,因此不需要循环。如果将文件模式更改为a
,它显然会将其附加到现有文件。在这种情况下,您可能不希望每次都继续写头文件。
Fxied,对不起,应该说'fieldnames' –
您的请求不返回JSON数据,只是HTML。很明显,将HTML解码为JSON会给出一个'JSONDecodeError'。在普通浏览器中访问该URL会导致'shoiapi.erpnext.com不存在' –
脚本现在应该可以在CSV文件中为您提供单个条目。 –