爬虫实战丨基于requests爬取比特币信息并绘制价格走势图

发布时间:2024年01月13日

写在前面

本期内容:基于requests爬取比特币信息并绘制价格走势图

下载地址https://download.csdn.net/download/m0_68111267/88734451

实验环境

  • anaconda丨pycharm
  • python3.11.4
  • requests

安装requests库的命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

实验描述

  1. 学习网络爬虫相关技术,熟悉爬虫基本库requests的使用。
  2. 熟悉网络爬虫相关基础知识。

实验内容

1. 尝试爬取网站数据

编写实例文件"bt01.py", 抓取网站中BTC和ETH的报价数据并打印输出BTC和ETH的实时价格:

程序设计

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import requests


def price(symbol, comparison_symbols=['USD'], exchange=''):
    url = 'https://min-api.cryptocompare.com/data/price?fsym={}&tsyms={}' \
        .format(symbol.upper(), ','.join(comparison_symbols).upper())
    if exchange:
        url += '&e={}'.format(exchange)
    print(url)
    page = requests.get(url)
    data = page.json()
    return data


print("当前BTC的美元价格为:" + str(price('BTC')))
print("当前ETH的美元价格为:" + str(price('ETH')))

程序分析

这段代码使用了Python的requests库来获取加密货币的价格信息。它定义了一个名为price的函数,该函数接受一个代币符号作为参数,并可选地接受比较货币符号列表和交易所名称。

函数的逻辑是先构建一个url,然后使用requests库发送GET请求获取到加密货币的价格数据。该url使用了Cryptocompare的API,通过拼接符号和比较货币来构建特定的API请求。

在主函数中,它使用price函数分别获取了BTC和ETH的美元价格,然后将结果打印出来。

要对这段代码进行详细分析,可以从以下几个方面入手:

  1. 函数的参数和返回值:函数接受一个代币符号作为参数,可选地接受比较货币符号列表和交易所名称。它返回一个包含价格信息的字典对象。

  2. API请求:函数构建了一个特定的API请求url,然后使用requests库发送GET请求获取到加密货币的价格数据。这个请求使用了Cryptocompare的API,可以根据代币符号和比较货币获取实时价格信息。

  3. 数据解析和处理:函数获取到API返回的数据后,使用json()方法将其转换为Python字典对象。然后,将价格信息提取出来并返回。

  4. 主函数的使用:主函数调用了price函数来获取BTC和ETH的美元价格,并将结果打印出来。

总体来说,这段代码是一个简单的加密货币价格获取程序。它使用了Cryptocompare的API来获取实时价格数据,并将结果返回。可以根据需要进一步扩展和修改该代码,以适应更多的加密货币和交易所。

运行结果

1

2. 简单绘制一下比特/美元价格曲线

编写实例文件"bt02.py", 使用matplotlib库绘制比特/美元的价格曲线:

程序设计

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
from bt01 import price
import datetime
import matplotlib.pyplot as plt

x = [0]
y = [0]
fig = plt.gcf()
fig.show()
fig.canvas.draw()
i = 0
while(True):
    data = price('BTC')
    i += 1
    x.append(i)
    y.append(data['USD'])
    plt.ylim([0, 100000])
    plt.title("BTC vs USD, Last Update is: " + str(datetime.datetime.now()))
    plt.plot(x, y)
    fig.canvas.draw()
    plt.pause(10)

程序分析

这段代码是一个用于实时绘制比特币价格走势图的程序。它导入了一个名为price的函数,该函数在之前的代码中已经定义了,用于获取比特币的价格信息。同时,它还导入了一些必要的库,例如datetime和matplotlib.pyplot。

代码中定义了两个空列表x和y,用于存储时间和比特币价格。接下来,创建一个图形容器fig,并使用plt.gcf()方法初始化。然后,显示图形容器fig,并通过fig.canvas.draw()绘制空图。

使用一个while循环不断获取比特币的价格信息,并像之前一样调用price函数。然后,将时间和价格分别添加到x和y列表中。接下来,通过plt.ylim()设置y轴的范围,plt.title()设置图表标题,并使用plt.plot()方法绘制x和y的曲线。最后,使用fig.canvas.draw()绘制更新后的图形,并使用plt.pause()方法暂停10秒钟。

总体来说,这段代码可以不断获取比特币的实时价格,并以折线图的形式展示出来。通过不断更新图形容器,可以实时查看比特币价格的变化。可以根据需要调整代码中的参数,以适应不同的需求和交易所。

运行结果

2

3. 绘制BTC和ETH的历史价格曲线图

编写实例文件"bt03.py", 首先抓取网站中BTC和ETH的历史价格数据,然后使用matplotlib和pandas绘制BTC和ETH的历史价格曲线图:

程序设计

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import requests
import datetime
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题


def hourly_price_historical(symbol, comparison_symbol, limit, aggregate, exchange=''):
    url = 'https://min-api.cryptocompare.com/data/histohour?fsym={}&tsym={}&limit={}&aggregate={}' \
        .format(symbol.upper(), comparison_symbol.upper(), limit, aggregate)
    if exchange:
        url += '&e={}'.format(exchange)
    print(url)
    page = requests.get(url)
    data = page.json()['Data']
    df = pd.DataFrame(data)
    df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
    return df
……请下载代码后查看哦

程序分析

这段代码是一个获取比特币和以太坊近期小时价格历史数据,并绘制折线图的程序。

首先,代码中定义了两个函数,hourly_price_historical和plotchart。hourly_price_historical函数用于获取指定货币对的历史小时价格数据,它接收参数symbol(货币符号)、comparison_symbol(对比货币符号)、limit(获取的小时数量)、aggregate(聚合参数,指定每个数据点的时间间隔)以及exchange(交易所,可选)。该函数首先构建了API请求的URL,并发送请求获取数据。然后,使用pandas库将返回的数据转换为DataFrame格式,并添加一个timestamp列,表示时间。最后,返回DataFrame。

plotchart函数用于绘制折线图,它接收参数axis(子图坐标轴)、df(包含价格数据的DataFrame)、symbol(货币符号)和comparison_symbol(对比货币符号)。该函数使用plot方法绘制数据中的close列(表示收盘价)与时间戳列(timestamp)。

在主程序中,首先调用hourly_price_historical函数获取比特币和以太坊的历史小时价格数据,分别存储在df1和df2中。然后,使用plt.subplots()创建一个包含两个子图的图形。接下来,调用plotchart函数分别绘制比特币和以太坊的折线图,并传入对应的数据和货币对信息。最后,调用plt.show()显示图形。

总体来说,这段代码可以获取指定货币对的历史小时价格数据,并以折线图的形式展示出来。通过使用pandas和matplotlib库,可以方便地处理和可视化数据,以便进行技术分析和趋势观察。可以根据需要调整代码中的参数,以获取不同货币对的历史价格数据。

运行结果

3

写在后面

我是一只有趣的兔子,感谢你的喜欢!

文章来源:https://blog.csdn.net/m0_68111267/article/details/135552237
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。