- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Python 从比特币区 block 链收集数据(交易量、挖矿费用等)。为此,我尝试使用 JSON 查询 blockchain.info 上的各个页面。
导入 json、requests 和 urlopen 后,我的代码开始于:
url = "https://blockchain.info/rawblock/00000000000000000000427c2cbfd8868c5bc987603d2483c9637f052316f89f?"
currentblock = requests.get(url, stream = True).json()
prevhash = str(currentblock['prev_block'])
我选择从最近的 block 开始我的代码(url 中/rawblock/之后的所有内容都是 block 的 ID),然后从 requests.get(url, stream=True) 的输出开始。 json()
,我得到链中前一个 block 的 ID(然后在下一个循环/循环中查询)。
我进入一个 for 循环,重复从每个 block 收集信息的过程,获取前一个 block 的 ID,然后继续以这种方式向后查询:
prevhash = str(currentblock['prev_block'])
for num in range(0,2700):
currenthash = prevhash
url = "https://blockchain.info/rawblock/" + currenthash + "?"
print(currenthash)
try:
currentblock = requests.get(url, stream = True).json()
except ValueError:
print(hashnum)
print("Response content is not JSON")
prevhash = currentblock['prev_block']
我设置 try,except 序列的原因是因为在看似随机的时间间隔内,我会收到一个错误,该错误会停止我的程序,该错误表示 requests.get()
的响应不是' JSON。我发现,如果我简单地捕捉到那个错误,程序会再次查询网页,大多数时候,在第二次尝试时,一切正常,程序会继续运行。
但是,我刚刚遇到了一连串令人讨厌的错误,老实说,我不知道它们的含义或如何修复它们。
这是回溯(删除了中间步骤):
Traceback (most recent call last):
File "C:\Users\Vlad\Desktop\lib\site-packages\urllib3\response.py", line 685, in _update_chunk_length
self.chunk_left = int(line, 16)
ValueError: invalid literal for int() with base 16: b''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
...
File "C:\Users\Vlad\Desktop\lib\site-packages\urllib3\response.py", line 689, in _update_chunk_length
raise httplib.IncompleteRead(line)
http.client.IncompleteRead: IncompleteRead(0 bytes read)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
...
File "C:\Users\Vlad\Desktop\lib\site-packages\urllib3\response.py", line 443, in _error_catcher
raise ProtocolError("Connection broken: %r" % e, e)
urllib3.exceptions.ProtocolError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
...
File "C:\Users\Vlad\Desktop\lib\site-packages\requests\models.py", line 753, in generate
raise ChunkedEncodingError(e)
requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))
最让我困惑的是这些错误并不一致(也就是说,如果我尝试完全相同的代码,我不会像以前那样在相同的时间/地点出现错误)。这是我第一次使用 JSON 查询,所以我根本不熟悉它,但我不知道为什么错误会以看似随机的间隔发生。
出于好奇,我在上述错误发生之前的链中的那个点重新启动了我的程序——这次没有错误。它一直在毫无问题地运行。
任何帮助将不胜感激,如果我可以更详细地解释我在做什么,请告诉我!
谢谢
最佳答案
使用重试包重试由于网络错误而失败的请求。
import requests
from retry import retry
@retry(exceptions=Exception, tries=5, delay=1)
def get_currentblock(url):
return requests.get(url)
url = "https://blockchain.info/rawblock/00000000000000000000427c2cbfd8868c5bc987603d2483c9637f052316f89f"
currentblock = get_currentblock(url).json()
prevhash = str(currentblock['prev_block'])
for num in range(0,2700):
currenthash = prevhash
url = "https://blockchain.info/rawblock/" + currenthash
print(currenthash)
try:
currentblock = get_currentblock(url).json()
except ValueError:
print(hashnum)
print("Response content is not JSON")
prevhash = currentblock['prev_block']
这将在出现任何 Exception
时以一秒的延迟重试最多五次 get()
。您可能希望将 exceptions=Exception
更改为更具限制性,因为您可以更好地了解可能遇到的异常。 get_currentblock()
方法只返回响应而不是 JSON 组件,以避免在 JSON 解析错误时触发重试,即我们只希望在发生网络错误时重试。
另请注意,stream=True
已从 get()
调用中删除,因为它与 json()
结合没有任何效果> 调用,因为在尝试将内容解析为 JSON 对象之前必须接收到整个响应。流式请求用于获取响应内容的迭代器,以便在接收到每一行时对其进行处理,但这不是它在这里的使用方式。
最后,我从 URL 末尾删除了 ?
。 ?
表示后面的查询参数,但没有必要,因为没有查询参数。
关于python - 使用 requests.get().json() 时的 ValueErrors、ProtocolErrors 和 ChunkedEncodingErrors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62009432/
我正在尝试并行运行具有循环返回值的函数。但它似乎停留在 results = pool.map(algorithm_file.foo, population) 在 for 循环的第二次迭代中 r
Serving Flask 应用程序“服务器”(延迟加载) 环境:生产警告:这是一个开发服务器。不要在生产部署中使用它。请改用生产 WSGI 服务器。 Debug模式:开启 在 http://0.0.
我使用“product.pricelist”模型中的 get_product_price_rule() 函数。我的代码是: price = self._get_display_price(produ
我收到以下错误: Traceback (most recent call last): File "/home/odroid/trackAndFollow/getPositions.py", line
我正在尝试采用机器学习方法,但遇到了一些问题。这是我的代码: import sys import scipy import numpy import matplotlib import pandas
我尝试使用 tensorflow 1.4.0 对我的原始记录进行分类。过程如下。 拳头:读取图片和标签,输出“tfrecord”格式的文件。第二:读取tf记录和训练 编写tfrecord脚本是 !/u
我是新手,所以需要任何帮助,当我要求一个例子时,我的教授给我了这段代码,我希望有一个工作模型...... from numpy import loadtxt import numpy as np fr
我无法弄清楚为什么会出现此 ValueError...为了提供一些上下文,我正在使用 requests、BeautifulSoup 和 json 与 python 来抓取站点 json 数据。 我不确
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我只有四个星期的 Python 经验。使用 Tkinter 创建一个工具,将新的公司 Logo 粘贴到现有图像之上。 下面的方法是获取给定目录中的所有图像并将新 Logo 粘贴到初始级别。现有图像、编
我只有四个星期的 Python 经验。使用 Tkinter 创建一个工具,将新的公司 Logo 粘贴到现有图像之上。 下面的方法是获取给定目录中的所有图像并将新 Logo 粘贴到初始级别。现有图像、编
我在尝试在 Keras 2.0.8、Python 3.6.1 和 Tensorflow 后端中训练模型时遇到问题。 错误消息: ValueError: Error when checking targ
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我有这段代码: while True: try: start = int(input("Starting number: ")) fin = int(i
我是 python 的初学者编码员,试图制作一个“模具滚筒”,您可以在其中选择模具的大小,它在我的代码的第 20 行返回此错误 import sys import random import geto
我有以下代码: import fxcmpy import pandas as pd from pandas import datetime from pandas import DataFrame a
我正在尝试使用 django 和 python 制作一个博客应用程序。我也在尝试使用 s3 存储桶进行存储,使用 heroku 进行部署。我正在学习 coreymschafer 的在线教程。我正在按照
我创建了一个 numpy 数组(考虑输入数据)并想更改顺序(一些数值运算后的输出数据)。在使用转换后的数组时,我遇到错误并找到了根本原因。请在下面找到详细信息并使用 numpy 版本 1.19.1 i
我已经引用了之前的查询 All arguments should have the same length plotly但仍然没有得到我的问题的答案。 我有一个黄金价格数据集。 Date
我是一名优秀的程序员,十分优秀!