创建循环以将URL提取到json和csv

时间:2019-10-28 22:59:23

标签: python json pandas loops url

我设置了一个回收37900条记录的循环。由于url /服务器的设置方式,每个url中最多只能显示200条记录。每个url以'skip = 200'或200的倍数结尾,以循环到显示下一个200条记录的下一个url页面。最终,我想遍历所有网址并将它们附加为表格。相关发布的unable to loop the last url with paging limits

我创建了两个循环,如下所示-一个循环用于使用skip =每200条记录创建一个url,另一个循环获取每个url的响应,然后另一个循环读取json并将其附加到单个数据帧中。

我不确定第二个循环中缺少什么-到目前为止,它仅为第一个URL页面生成json,但不会为后续页面生成json。我觉得usl json不会附加到列表json = [],因此可以防止循环并将json附加到csv中。任何有关修改循环和改进这些代码的建议都将受到赞赏!

atom-text-editor
.syntax--comment {
color: red;
}

1 个答案:

答案 0 :(得分:0)

我没有要测试的东西

我认为您对此过于复杂。此后,您已经编辑了问题,但有几点要说明:

  1. 您定义了jsnlist = [],但从不使用它。为什么?
  2. 您调用了自己的对象json(现在消失了,但是我不确定您是否理解为什么)。调用您自己的对象json会取代实际的模块,整个代码在进入循环之前都会陷入停顿状态
  3. 完全没有理由在尝试创建数据框之前将数据保存到磁盘
  4. 以写入模式(.json)打开'w'文件将在循环的每次迭代中擦除所有现有数据
  5. 将JSON附加到文件时,读回时不会提供有效的格式进行解析。充其量,它可能是JSONLines
  6. 在循环中添加DataFrame的复杂性非常糟糕,因为它每次都需要复制原始数据。

您的方法将是这样的:

import pandas as pd
import requests
import json

records = range(37900)
skip = records[0::200]

Page = []
for i in skip:
    endpoint = "https://~/Projects?&$skip={}".format(i)
    Page.append(endpoint)

jsnlist = []
for j in Page:
    response = session.get(j) #session here refers to requests.Session() I had to set up to authenticate my access to these urls
    responsejs = response.json()
    responsejsval = responsejs['value'] #I only want to extract header called 'value' in each json
    jsnlist.append(responsejsval)

df = pd.DataFrame(jsnlist)

df = pd.DataFrame(jsnlist)可能需要做一些工作,但是您需要证明我们面临的挑战。我需要看到responsejs['value']才能完整回答。