我的第一篇博客:Python爬取新浪财经股票页面 并用matplotlib可视化输出结果
(由于疫情在家闲着,开学至少得等到四月份,便在上个星期动起了学习python的念头,凭借着大一C语言微薄的基础草草学习语法后便开始了学写爬虫。跟着教学视频爬了几个静态网站后便开始尝试爬动态网站,同时也想把自己的学习过程用博客的形式记录下来!)
目的:
1.爬取所有股票的名称、成交额、涨跌额
2.根据股票的种类和总成交额输出水平条形图
3.根据涨跌额的正负将跌的股票设为灰色,涨的股票设为蓝色
文章目录
- 目的:
- 一、分析及获取信息
- 二、Matplotlib绘图
- 三、全代码展示
- 四、输出结果
- 五、学习资源
- 六、参考文献
一、分析及获取信息
这次我选择了新浪财经的股票页面作为我的爬取目标[新浪财经股票行情中心http://vip.stock.finance.sina.com.cn/mkt/#cyb_root]根据分析发现这个网站在翻页时url不会改变
通过开发者工具的Preview选项筛选出对应股票信息的json文件
在General中找到了它的request_url
以及请求时所需要的接口参数
再对比多个页面的参数后,可以看到这个字典中影响翻页的只有page这一项,改变这个接口参数就可以实现翻页了,随后用requests.get函数请求相应的页面,并用正则表达式匹配出想要的信息就可以了。这里我只匹配出了名称,总交易额,和涨跌额。
base_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?
#根据Header中的参数配置接口
params = {"page": "1","num": "40", "sort": "symbol","asc": "1","node": "cyb","symbol": "","_s_r_a": "page"}
header = {"User-Agent": "Mozilla/5.0"} #设置请求头
r = requests.get(base_url, params=params, headers=header) #请求数据
names = re.findall(r',name:"(.*?)",', r.text) #匹配股票名称于列表names中
amount = re.findall(r'amount:(.*?),', r.text) #匹配股票总成交额于列表amount中
pricechange = re.findall(r',pricechange:"(.*?)",', r.text) #匹配股票涨跌额于列表pricechange中
二、Matplotlib绘图
在此之前我也写了几个下载图片和小说的小爬虫,但是写完后看着黑黑的命令行感觉并不能很好的表达出我的成就感,同时这种文字信息爬虫爬出的数据也不是很直观,经过了解后我发现了matplotlib这个模块,接触它的时候感觉和学校里学的matlab很像。
这里我设置了一个color列表,并且遍历所有的股票,将涨跌额为正的股票设置为蓝色,将涨跌额为负的设为灰色,每遍历一个股票,color列表中就会多一个颜色信息
color = [] #定义颜色空列表
for i in range(len(amount)): #遍历列表amount[i] = int(amount[i])/10000 #将总交易额换算成万的单位if '-' in pricechange[i]: #对涨跌额的正负进行判断color.append('lightslategray') #如果当前股票为负数,将灰色加入颜色列表else:color.append('deepskyblue') #如果当前股票为非负数,将蓝色加入颜色列表
最后在画条形图的时候将color参数加在后面就行了
plt.barh(range(len(amount)), amount, alpha=0.6, color=color)
plt.yticks(range(len(amount)), names) #将y轴标度设置为股票名称
由于我选择的是水平画图,所以plt.barh的第一个参数是y轴的数据,这里我将它设置为40个整数,对应一整页的股票数,随后用plt.ytick命令将这四十个整数的标度改为股票的名字,第二个参数则是想展示出他们的总成交额。
三、全代码展示
#CSDN用户:神经元2020
#欢迎一起交流!
import re
import requests
import matplotlib.pyplot as plt
import matplotlibpages = 2
#定义抓取的页数
base_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?"
#在XHR过滤器中找到对应股票列表的URL
path = "D:/PycharmProjects/Learn/"
#定义存储路径def Get_one_page(page, base_url, path):#抓取数据params = {"page": str(page),"num": "40", #根据Header中的参数配置接口"sort": "symbol","asc": "1","node": "cyb","symbol": "","_s_r_a": "page"}header = {"User-Agent": "Mozilla/5.0"} #设置请求头r = requests.get(base_url, params=params, headers=header) #请求数据names = re.findall(r',name:"(.*?)",', r.text) #匹配股票名称于列表names中amount = re.findall(r'amount:(.*?),', r.text) #匹配股票总成交额于列表amount中pricechange = re.findall(r',pricechange:"(.*?)",', r.text) #匹配股票涨跌额于列表pricechange中color = [] #定义颜色空列表for i in range(len(amount)): #遍历列表amount[i] = int(amount[i])/10000 #将总交易额换算成万的单位if '-' in pricechange[i]: #对涨跌额的正负进行判断color.append('lightslategray') #如果当前股票为负数,将灰色加入颜色列表else:color.append('deepskyblue') #如果当前股票为非负数,将蓝色加入颜色列表#开始绘图matplotlib.rcParams['font.sans-serif'] = ['SimHei'] #设置字体matplotlib.rcParams['axes.unicode_minus'] = False #选择水平画图模式plt.figure(figsize=(18, 11), dpi=200) #设置图片大小一定要在画图之前plt.barh(range(len(amount)), amount, alpha=0.6, color=color) #绘制条形图plt.yticks(range(len(amount)), names) #将y轴标度设置为股票名称plt.xlabel('总成交额(万元)') #将x轴命名为成交额for x, y in enumerate(amount): #给每一个条形图后加上成交额数字plt.text(y, x-0.15, '%s' % y)title = '新浪财经第{}页成交额数据展示'.format(page)plt.title(title)plt.savefig(path + title + '.png') #保存图片print('第{}页数据下载完成'.format(page))for page in range(pages): #主程序开始Get_one_page(page+1, base_url, path) #注意这里的+1
print('所有页面下载完成')
四、输出结果
这里我只加载了两页数据
可以看到图片已经下载到路径文件夹当中
可能图片的像素设置得比较大,上传后变得模糊了,可以看看放大后的效果还是非常不错的
对比一下网站信息也没有问题
五、学习资源
不知不觉把第一篇博客写完了,感觉好开心啊,同时也分享一下我这一星期的主要的学习资源
视频:北京理工大学 嵩天 Python网络爬虫与信息提取
北京理工大学 嵩天 Python数据分析与展示
电子书:Python网络爬虫权威指南(第二版) 提取码:je3y
利用Python进行数据分析(第二版) 提取码:6747
六、参考文献
我在学习爬虫的过程中碰到了很多问题,百度后几乎都在csdn的问答或博客中得到了解决,这也是我为什么注册csdn账号并写博客的原因,对于这篇博客主要参考了一篇问答,一篇博客,尤其是那篇博客,对于学习matplotlib值得一看
[1]https://blog.csdn.net/hohaizx/article/details/79101322
[2]https://bbs.csdn.net/topics/391492242
我的第一篇博客:Python爬取新浪财经股票页面 并用matplotlib可视化输出结果相关推荐
- python爬取小说写入txt_燎原博客—python爬取网络小说存储为TXT的网页爬虫源代码实例...
python是一门优秀的计算机编程语言,两年前曾因为动过自动化交易的念头而关注过它.前几天在微信上点了个python教学的广告,听了两堂课,所以现在又热心了起来,照葫芦画瓢写了一段简单的网络爬虫代码, ...
- 第一篇博客——Python如何实现一个守护进程来定时每天在十点的时候跑shell脚本
还需要考虑不同异常情况 helloworld.py import datetime import time import osdef doSth():print('hello')n=os.system ...
- Python中的TCP的客户端UDP学习----第一篇博客
Python中的TCP的客户端&UDP学习--第一篇博客 PS: 每日的怼人句子"我真想把我的脑子放到你的身体里,让你感受一下智慧的光芒" 先说UDP流程 发送: 创建套接 ...
- Python 用pygame 做一个游戏的开始界面(小白第一篇博客)
Python 用pygame 做一个游戏的开始界面(小白第一篇博客) 主要功能实现 本篇文章主要是实现了一个游戏开始界面的两个功能: 1,将鼠标放到"开始游戏"或"结束游 ...
- 4. 写第一篇博客,最好的时间是今日,今时,今刻
橡皮擦,一个逗趣的互联网高级网虫,为你带来新职场故事,搬来程序员敲门砖. 已完成文章 国内,首套,成体系,技术博客写作专栏发布啦 技术博客只能写技术文章吗?当然是由我们自己来定义. 为"她& ...
- 第一篇博客,与您共勉
第一篇博客,与您共勉 提示:点击右上角关注博主,收获共同话题 大家好,好男人就是我,我就是小陈同学.下面是我的个人相关简介: 文章目录 第一篇博客,与您共勉 个人介绍 学习的一些计划: 最后 个人介绍 ...
- 【个人随笔】我的第一篇博客(为什么、写什么、怎么写)
关于这个博客(Ezrealer) 旧平台.新博客 这是我在这个博客下的第一篇博客,却是我使用CSDN的第N篇博客了,之所以又开了个博客,是想统一一下域名和ID,万一以后打造个个人品牌之类的,可以说是强 ...
- 血泪般的教训-我的第一篇博客
血泪般的教训-我的第一篇博客 血泪般,血泪般血泪般血泪般..... 记住,要记住!!!! 千万不要手贱地乱在电子产品上删东西. -- [ 吡了gou的经验001 ] 当我们用时Ubuntu时,切记!! ...
- 决策树经典算法ID3——我的第一篇博客
简介 决策树是机器学习中一种常见的分类算法,属于有监督学习算法(至于什么是有监督学习,什么是无监督学习读者可以自行百度).决策树算法有多种,ID3算法是其中一种经典的决策树算法,这种算法的核心是信息熵 ...
最新文章
- java之字符串学习记录
- C++11:POD数据类型
- C++实现二分查找(递归方法和非递归方法)
- GBDT--简单理解
- C语言 · 身份证号码升级
- Codeforces Round #499 (Div. 2) Problem-A-Stages(水题纠错)
- DELPHI参数几个概念上的区别 收藏
- eclipse打包jar发布到linux下运行出错(java.lang.ClassNotFoundException: cmd.WordCount$MyMapper )
- AT4119-[ARC096C]Everything on It【斯特林数,容斥】
- 2022中国素质教育行业报告
- stm32驱动_STM32直流电机启动(一)驱动电路的介绍
- flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法
- 【论文导读】Selecting Data Augmentation for Simulating Interventions
- java复习/学习流程
- 11位大咖集结!和最专业的人,探讨“由内及外”的未来趋势 | 生辉 · 生命科学大会-1
- C++二进制数转十进制
- c代码生成matlab模块,使用 C Caller 模块集成 C 代码
- 总结在mac电脑上安装brew
- NAT(地址转换模式)
- 崇左市2021年各校高考成绩查询,2021年广西崇左各高中中考分数线及录取时间结果查询安排...
热门文章
- plex 乱码_最适合HTPC用户的Plex客户端是什么?
- 21 _ 服务调用失败时有哪些处理手段?
- 留学生计算机辅导请点这里
- 基于安卓和springboot的在线课堂设计
- 笔记本电脑一直插着电源对电池好不好?
- DHS:Blueprint for a Secure Cyber Future
- 64位ubuntu安装N64模拟器mupen64
- 李阳疯狂英语突破对话(40)-不要拐弯抹角
- lbm 弛豫时间_学习格子 Boltzmann 方法(LBM)该如何入门,需要有哪些前置知识?...
- windows10创建虚拟机时选择客户机操作系统遇到不支持64位操作系统问题