json - 如何将来自不同 url 的 r.headers 写入一个 json?
问题描述
我想在 python 中使用 requests 库时抓取几个 url。我正在仔细检查 GET 请求以及响应标头。但是,当我从不同的 url 爬取和获取数据时,我遇到了一个问题,即我不知道所有的“键:值”,它们是进来的。因此,将这些数据写入有效的 csv 文件是不可能的,在我的观点。因此,我想将数据写入 json 文件。
问题类似于 2014 年的以下线程,但不一样: Get a header with Python and convert in JSON (requests - urllib2 - json)
import requests, json
urls = ['http://www.example.com/', 'http://github.com']
with open('test.json', 'w') as f:
for url in urls:
r = requests.get(url)
rh = r.headers
f.write(json.dumps(dict(rh), sort_keys=True, separators=(',', ':'), indent=4))
我期望一个 json 文件,其中包含每个 URL 的标题。我得到一个包含这些数据的 Json 文件,但我的 IDE (PyCHarm) 显示一个错误,指出 JSON 标准只允许一个顶级值。我已阅读文档:https ://docs.python.org/3/library/json.html#repeated-names-within-an-object ;但没有得到它。任何提示将不胜感激。编辑:结果中唯一缺少的是另一个逗号。但是我在哪里输入它,我需要什么命令呢?
解决方案
您需要将其添加到数组中,然后最后将 json 转储到文件中。这将起作用。
urls = ['http://www.example.com/', 'http://github.com']
headers = []
for url in urls:
r = requests.get(url)
header_dict = dict(r.headers)
header_dict['source_url'] = url
headers.append(header_dict)
with open('test.json', 'w', encoding='utf-8') as f:
json.dump(headers, f, sort_keys=True, separators=(',', ':'), indent=4)
您仍然可以将其写入 csv:
import pandas as pd
df = pd.DataFrame(headers)
df.to_csv('test.csv')
推荐阅读
- python - tkinter ttk.Treeview 如何更改第一列的背景颜色?
- tkinter - How can I use the result of a nested function?
- asp.net - 如何在 .NET 中解密 SAML 响应
- python - 在 groupby 之后使用数据框列连接另一列的值
- bash - 如何遍历 Bash 中的单词列表?
- excel - 带结构 Excel Vba
- javascript - 当元素已经在视口中时触发 IntersectionObserver
- c# - 无法使用 C# 中的 Process 类获取有关在 bash 中运行的命令的信息
- c# - decimal.TryParse 和十进制变量
- sql - 如何通过 SQL 聚合数据?