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

文章目录

  • 写在前面
    • 实验环境
    • 实验描述
    • 实验内容
  • 写在后面

写在前面

本期内容:基于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 requestsdef 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 dataprint("当前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 pltx = [0]
y = [0]
fig = plt.gcf()
fig.show()
fig.canvas.draw()
i = 0
while(True):data = price('BTC')i += 1x.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 pltplt.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

写在后面

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345084.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型实战营Day3 基于 InternLM 和 LangChain 搭建你的知识库

LLM的局限性: 知识时效性,专业能力,定制化成本 两种大模型开发范式: RAG FineTune RAG: 检索问答生成 外挂知识库 成本低 FineTune: 更新成本高 GPU算力要求高 RAG开发框图: 用户输入 文本向量化 匹配相似…

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

目录 1. 前言2. 参数2.1 静态变量2.2 静态函数2.3 委托 3. 功能3.1 按钮:Button、RepeatButton3.2 文本:Label 、TextField 、TextArea 、PasswordField3.3 滑动条:HorizontalScrollbar 、VerticalScrollbar3.4 滑条:VerticalSlid…

JVM基础(12)——G1调优

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

pytorch学习笔记(十)

一、损失函数 举个例子 比如说根据Loss提供的信息知道,解答题太弱了,需要多训练训练这个模块。 Loss作用:1.算实际输出和目标之间的差距 2.为我们更新输出提供一定的依据(反向传播) 看官方文档 每个输入输出相减取…

Handsfree_ros_imu:ROS机器人IMU模块的get_imu_rpy.py文件学习记录

上一篇博客写了关于Handsfree_ros_imu:ROS机器人IMU模块ARHS姿态传感器(A9)Liunx系统Ubuntu20.04学习启动和运行教程: https://blog.csdn.net/qq_54900679/article/details/135539176?spm1001.2014.3001.5502 这次带来get_imu_r…

C++I/O流——(2)预定义格式的输入/输出(第一节)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 含泪播种的人一定能含笑收获&#xff…

【python】08.面向对象编程基础

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象(object&#…

.【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)

概率图模型是一种用图形表示概率分布和条件依赖关系的数学模型。概率图模型可以分为两大类:有向图模型和无向图模型。有向图模型也叫贝叶斯网络,它用有向无环图表示变量之间的因果关系。无向图模型也叫马尔可夫网络,它用无向图表示变量之间的…

Java 面试题 - 多线程并发篇

线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类,并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码: class MyThread extends Thread {public void run() {// 定义线程的行为} …

【python】09.面向对象进阶

面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。 property装…

88.乐理基础-记号篇-反复记号(二)D.C.、D.S.、Fine、Coda

内容参考于:三分钟音乐社 上一个内容:87.乐理基础-记号篇-反复记号(一)反复、跳房子-CSDN博客 下图红色左括号框起来的东西,它们都相对比较抽象一点,这几个词都是意大利语 首先D.C.这个标记,然…

江苏桉木建筑模板 — 现货供应,施工高效

在快节奏的建筑行业中,有效率的施工和高质量的材料是成功的关键。江苏桉木建筑模板以其现货供应和高效施工的特点,在建筑行业中获得了广泛的认可和使用。 产品特点 高质量桉木材质:我们的建筑模板采用高品质的桉木,确保了模板的…