通过实时访问API接口获取json数据落地至本地,分享一个小脚本。
API访问数据接口格式为:
数据访问结构
从数据结构中可以了解我们需要获取每页items数据,以及当前页码、总页码信息。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import json
import urllib.request
import urllib.parse
from datetime import datetime, date, timedelta
#添加递归深度
import sys
sys.setrecursionlimit(100000)
#获取昨天日期,并格式化为“年-月-日”
yesterday = (date.today() + timedelta(days = -1)).strftime("%Y-%m-%d")
#拼接请求URL地址
url = 'http://ip/test?from='+ yesterday + '&end=' + yesterday +'&page='
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}
#文件存档地址,以日期创建文件
filepath="/app/data/" + yesterday+".log"
#递归
def deal(currentPage,totalPages):
print("当前页:"+str(currentPage)+";"+str(totalPages))
#当前页大于等于总页数,递归结束
if(currentPage >= totalPages):
return
else:
open_url = url + str(currentPage)
print(open_url)
response = openUrl(open_url)
#当前页数据
responseJson = json.loads(response)
items = responseJson['Items']
#print("当前页数据:"+items)
#TODO 数据处理
text_save(filepath,items)
totalPages = responseJson["Pagination"]["TotalPages"]
currentPage = responseJson["Pagination"]["CurrentPage"]
if currentPage < totalPages:
print(isinstance(currentPage,int))
#递归处理下一页数据
deal(currentPage+1,totalPages)
else:
return
#定义url
def openUrl(url):
req = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(req).read().decode('utf-8')
return response
def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表.
file = open(filename,'a')
for i in range(len(data)):
s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择
s = s.replace("'",'').replace(',','') +'\n' #去除单引号,逗号,每行末尾追加换行符
file.write(s)
file.close()
print("保存文件成功")
#初始值
deal(1,10)
部分说明如下:
当脚本内包含递归时有时会出现如下错误:
递归错误
该报错表示以超过最大递归深度,解决该问题则需要增加递归深度,如下:
import sys
sys.setrecursionlimit(100000) #设置为十万
网友评论