>我正在使用python来抓取网址,例如在代码吹中
import requests
from bs4 import BeautifulSoup
import json
n_index = 10
base_link = 'http://xxx.xxx./getinfo?range=10&district_id=1&index='
for i in range (1,n_index+1):
link = base_link+str(i)
r = requests.get(link)
pid = r.json()
print (pid)
它返回十个结果就像这个打击
{'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'}]}
然后我想将生成的 10 行保存到 JSON 文件中,如下面的代码所示:
with open('sylist.json', 'w') as outfile:
json.dump(r.json(), outfile, indent=4)
但是只有一个结果保存在本地的json文件中,谁可以帮助我解决,非常感谢
在典型的方式上,尝试以下方式逐行编写结果,而无需每次打开/关闭文件。
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)))
让我稍微扩展一下弗兰克的答案。您将在 for 循环内发送请求,这意味着在循环的每次迭代中,pid 的值都会被覆盖。因此,当您想要将其内容转储到输出文件时,pid 仅保存上次迭代/请求中的内容。我建议应用以下方法之一来解决您的问题:
- 在 for 循环中包含写入组件(反之亦然,如 Frank AK 的答案中所建议的那样(。
-
与其每次都覆盖 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)