美文网首页
Python 获取url分页数据

Python 获取url分页数据

作者: lily_佳忆 | 来源:发表于2019-01-24 16:06 被阅读38次

通过实时访问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) #设置为十万

相关文章

网友评论

      本文标题:Python 获取url分页数据

      本文链接:https://www.haomeiwen.com/subject/brzyjqtx.html