【问题标题】:How to scrape JSON file from url and print contents如何从 url 中抓取 JSON 文件并打印内容
【发布时间】:2018-05-15 00:29:27
【问题描述】:

这是我要抓取的网站:https://s2.coinmarketcap.com/generated/search/quick_search.json

我不知道如何从 URL 中抓取 JSON 文件并打印出内容。 我尝试阅读,但我得到的最多的是这段代码,当我运行它时它不起作用:

import requests
import json

url = "https://s2.coinmarketcap.com/generated/search/quick_search.json"
r = requests.get(url)
cont = json.loads(r.content)
print(cont)

【问题讨论】:

  • 代码在我运行时运行良好。你能描述一下具体是什么不起作用吗?
  • 它显示它正在加载并冻结整个屏幕,不允许我在 Shell 和我的程序中单击或键入任何内容。我试着等待它,但即使在 20 分钟后它仍然显示它正在加载
  • 代码对我来说很好 - Python 3。

标签: json python-3.x web-scraping python-requests


【解决方案1】:

几乎正确。应该是 r.json()。 Requests 有一个内置的 json 解析器。

import requests
import json

url = "https://s2.coinmarketcap.com/generated/search/quick_search.json"
r = requests.get(url)
cont = r.json()
print(cont)

此外,如果您想打印特定内容,只需像其他任何 json obj 一样对其进行迭代

for k in cont:
    if k['name'] == 'VapersCoin':
        do_something()

【讨论】:

  • 我尝试了这段代码,但由于某种原因,我仍然遇到了我的开发环境完全冻结的问题,我无法在 shell 或程序中单击或输入任何内容。我的光标指示程序正在加载(?)。我等了大约 10 分钟,但它没有打印出任何东西,并且仍然停留在冻结模式。
  • 也许你没有足够的内存来处理这个 json。你能告诉我你到底想做什么。您是否尝试迭代字典并打印出其中的某些部分?当我尝试在内存中迭代大文件时,我通常会像这样冻结。就像在代码的哪一部分冻结?是按请求获取吗?还是在打印部分?您能否尝试在控制台中逐行粘贴此代码并告诉我哪个部分导致失败。
【解决方案2】:

看起来你遇到了字符串地狱。有时使用 Python3,您必须执行 encode() 或 decode() 才能将字节字符串转换为 unicode 字符串。

在您的示例代码中,如果您将第 6 行更改为

cont = json.loads(r.content.decode())

它会运行。 @PhilippeT 的解决方案也很好,因为 json() 函数似乎会自动返回一个 unicode 字符串。

【讨论】:

  • 我尝试了这段代码,但由于某种原因,我仍然遇到了我的开发环境完全冻结的问题,我无法在 shell 或程序中单击或输入任何内容。我的光标指示程序正在加载(?)。我等了大约 10 分钟,但它没有打印出任何东西,并且仍然停留在冻结模式。
  • @j.doe:嗯。有时我尝试直接从 IDE/编辑器运行时会得到奇怪的结果。如果您从终端运行,它的表现会更好。只要你在终端里,你能ping通网站吗?
猜你喜欢
  • 2019-03-27
  • 2023-03-29
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多