python从url请求json

时间:2018-01-09 05:44:29

标签: python json python-requests

我正在使用python来刮取代码中的URL

{'product_info': [{'pid': '1', 'product_type': '2'}]}
{'product_info': [{'pid': '2', 'product_type': '2'}]}
{'product_info': [{'pid': '3', 'product_type': '2'}]}
{'product_info': [{'pid': '4', 'product_type': '2'}]}
{'product_info': [{'pid': '5', 'product_type': '2'}]}
{'product_info': [{'pid': '6', 'product_type': '2'}]}
{'product_info': [{'pid': '7', 'product_type': '2'}]}
{'product_info': [{'pid': '8', 'product_type': '2'}]}
{'product_info': [{'pid': '9', 'product_type': '2'}]}
{'product_info': [{'pid': '10', 'product_type': '2'}]}

它就像这次打击一样返回十个结果

with open('sylist.json', 'w') as outfile:
    json.dump(r.json(), outfile, indent=4)

然后我想将生成的10行保存到json文件中,如下面的代码所示:

<div *ngIf="currentList.length > 0; else nodata" id="outerContainer">
    <div id="listContainer">
        <div class="listItem" *ngFor="let list of currentList | listFilter : listfilterChar" (click)="openContactList()">
            <div class="listInfo">
              <h3>
                {{list.Name}}
              </h3>
          </div>
    </div>
    <div id="alphabetContainer">
      <p *ngFor="let letter of alphabetArray">
        <span class="alphabetContainer" (click)='setListFiltercharacter($event)'>{{letter}}</span>
      </p>
    </div>
  </div>

但只有一个结果保存到本地的json文件中,谁可以帮我解决,非常感谢

2 个答案:

答案 0 :(得分:2)

以典型的方式,尝试以下方式逐行写入结果,而不是每次打开/关闭文件。

with open('sylist.json', 'a+') as outfile:
    for i in range (1,n_index+1):
        link = base_link+str(i)
        r = requests.get(link)
        outfile.write("{}\n".format(json.dump(r.json(), outfile, indent=4)))

答案 1 :(得分:0)

让我稍微扩展弗兰克的回答。 您正在for循环中发送请求,这意味着在循环的每次迭代中, pid 的值都会被覆盖。因此,当您要将其内容转储到输出文件时, pid 仅包含最后一次迭代/请求中的内容。我建议您应用以下其中一项来解决您的问题:

  1. 在for循环中包含写入组件(反之亦然,如Frank AK的回答所示)。
  2. 您不必每次都覆盖 pid 的内容,而是直接将其附加到for循环中,如下所示:

    my_list = []
    for i in range (1,n_index+1):
        link = base_link+str(i)
        r = requests.get(link)
        pid = r.json()
        my_list.append(pid)
    
    with open('sylist.json', 'w') as outfile:
        json.dump(my_list, outfile, indent=4)