将JSON元素写入csv文件python
我刚刚创建了一个python程序,该程序使用googlewebmasterapi检查目标站点是否对移动设备友好&然后根据响应提取某些Json元素。它还捕获了本地文件夹中的屏幕截图 该脚本运行良好,但当我试图将这些json对象写入csv文件时,它不起作用 这是我的密码:-将JSON元素写入csv文件python,python,arrays,json,csv,object,Python,Arrays,Json,Csv,Object,我刚刚创建了一个python程序,该程序使用googlewebmasterapi检查目标站点是否对移动设备友好&然后根据响应提取某些Json元素。它还捕获了本地文件夹中的屏幕截图 该脚本运行良好,但当我试图将这些json对象写入csv文件时,它不起作用 这是我的密码:- import requests, json, string, random, time import csv from base64 import decodestring from random import randint
import requests, json, string, random, time
import csv
from base64 import decodestring
from random import randint
#links = open(r'D:\\Carlos\\Links.txt')
links = ['https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false',
'https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=http://www.volkswagen-me.com/en-vwme/service/protection/motor-insurance.html&strategy=mobile&filter_third_party_resources=false']
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
i = 12
def get_data(each):
try:
r = requests.get(each)
except:
pass
#time.sleep(randint(1, 3))
try:
json_data = json.loads(r.text)
except:
pass
try:
score = json_data['ruleGroups']['USABILITY']['score'];score=int(score)
except:
pass
try:
Pass = json_data['ruleGroups']['USABILITY']['pass'];Pass=str(Pass)
except:
pass
try:
ConfigureViewport = json_data['formattedResults']['ruleResults']['ConfigureViewport']['localizedRuleName'];ConfigureViewport=str(ConfigureViewport)
except:
pass
try:
UseLegibleFontSizes = json_data['formattedResults']['ruleResults']['UseLegibleFontSizes']['localizedRuleName'];UseLegibleFontSizes=str(UseLegibleFontSizes)
except:
pass
try:
AvoidPlugins = json_data['formattedResults']['ruleResults']['AvoidPlugins']['localizedRuleName'];AvoidPlugins=str(AvoidPlugins)
except:
pass
try:
SizeContentToViewport = json_data['formattedResults']['ruleResults']['SizeContentToViewport']['localizedRuleName'];SizeContentToViewport=str(SizeContentToViewport)
except:
pass
try:
SizeTapTargetsAppropriately = json_data['formattedResults']['ruleResults']['SizeTapTargetsAppropriately']['localizedRuleName'];SizeTapTargetsAppropriately=str(SizeTapTargetsAppropriately)
except:
pass
try:
AvoidInterstitials = json_data['formattedResults']['ruleResults']['AvoidInterstitials']['localizedRuleName'];AvoidInterstitials=str(AvoidInterstitials)
except:
pass
try:
image_link = json_data['screenshot']['data']; image_link = image_link.replace("_", "/").replace("-","+")
except:
pass
#try:
id_generator_name = "".join( [random.choice(string.letters) for i in xrange(15)] )+'.jpeg'
#except:
# pass
#try:
fh = open(id_generator_name, "wb")
#except:
# pass
try:
fh.write(str(image_link).decode('base64'))
time.sleep(1)
except:
pass
try:
fh.close()
except:
pass
try:
error_code = json_data['error']['message'];error_code=str(error_code)
except:
pass
try:
print each, score, Pass, ConfigureViewport, UseLegibleFontSizes, AvoidPlugins, SizeContentToViewport, SizeTapTargetsAppropriately, AvoidInterstitials, error_code
except:
pass
try:
writer.writerow({'each':each, 'score':score, 'Pass':Pass, 'ConfigureViewport':ConfigureViewport,
'UseLegibleFontSizes':UseLegibleFontSizes, 'AvoidPlugins':AvoidPlugins,
'SizeContentToViewport':SizeContentToViewport,'SizeTapTargetsAppropriately':SizeTapTargetsAppropriately,
'AvoidInterstitials':AvoidInterstitials, 'error_code':error_code,'imagename':id_generator_name})
except:
pass
#path to the csv file
with open("D:\Carlos\Data_file\output.csv", "ab")as export:
fieldnames = ['each', 'score', 'Pass', 'ConfigureViewport', 'UseLegibleFontSizes', 'AvoidPlugins', 'SizeContentToViewport',
'SizeTapTargetsAppropriately', 'AvoidInterstitials', 'error_code','imagename']
writer = csv.DictWriter(export, fieldnames=fieldnames)
writer.writeheader()
for each in links:
#try:
get_data(each)
#except:
# pass
请提供如何写入csv的建议?或者代码中哪里出了问题?我喜欢使用Pandas数据帧,但是如果不使用Pandas,可能会有点过头。熊猫数据帧也非常适合进行分析和比较 您可以将JSON放入数据帧,然后将数据帧输出到CSV文件
import pandas as pd
df = pd.read_json('path/to/json/file')
df.to_csv('filename.csv')
请注意,只有当您的JSON有一个级别并且可能是csv时,它才这么简单。否则,您需要将JSON读入dict,导航到适当的级别,然后将其读入数据帧
我更喜欢使用CSV,正如您在上面的代码中所看到的,我可以为我想要解析的每个JSON元素分配变量,但是当我尝试将这些变量写入CSV文件时,它不写任何东西&代码退出时没有错误。您可以捕获每个
try:except:
block的所有可能的异常,因此不显示错误是可以理解的。您应该捕获显式异常,以避免隐藏意外异常。请解释哪些异常不起作用。在脚本中添加一个调试打印,以显示要传递给writer.writerow
(print({'each':each,'score':score,})
)“代码中哪里出错了?”-您的错误处理是完全没有用的,不是说得太细了。请阅读并理解所编写的代码无法调试。请在不使用try:的情况下尝试您的代码,除非:
块,否则您将了解发生了什么。