首页 > 解决方案 > 如何将来自不同 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 ;但没有得到它。任何提示将不胜感激。编辑:结果中唯一缺少的是另一个逗号。但是我在哪里输入它,我需要什么命令呢?

标签: jsonpython-requests

解决方案


您需要将其添加到数组中,然后最后将 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')

推荐阅读