(由于疫情在家闲着,开学至少得等到四月份,便在上个星期动起了学习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可视化输出结果相关推荐

  1. python爬取小说写入txt_燎原博客—python爬取网络小说存储为TXT的网页爬虫源代码实例...

    python是一门优秀的计算机编程语言,两年前曾因为动过自动化交易的念头而关注过它.前几天在微信上点了个python教学的广告,听了两堂课,所以现在又热心了起来,照葫芦画瓢写了一段简单的网络爬虫代码, ...

  2. 第一篇博客——Python如何实现一个守护进程来定时每天在十点的时候跑shell脚本

    还需要考虑不同异常情况 helloworld.py import datetime import time import osdef doSth():print('hello')n=os.system ...

  3. Python中的TCP的客户端UDP学习----第一篇博客

    Python中的TCP的客户端&UDP学习--第一篇博客 PS: 每日的怼人句子"我真想把我的脑子放到你的身体里,让你感受一下智慧的光芒" 先说UDP流程 发送: 创建套接 ...

  4. Python 用pygame 做一个游戏的开始界面(小白第一篇博客)

    Python 用pygame 做一个游戏的开始界面(小白第一篇博客) 主要功能实现 本篇文章主要是实现了一个游戏开始界面的两个功能: 1,将鼠标放到"开始游戏"或"结束游 ...

  5. 4. 写第一篇博客,最好的时间是今日,今时,今刻

    橡皮擦,一个逗趣的互联网高级网虫,为你带来新职场故事,搬来程序员敲门砖. 已完成文章 国内,首套,成体系,技术博客写作专栏发布啦 技术博客只能写技术文章吗?当然是由我们自己来定义. 为"她& ...

  6. 第一篇博客,与您共勉

    第一篇博客,与您共勉 提示:点击右上角关注博主,收获共同话题 大家好,好男人就是我,我就是小陈同学.下面是我的个人相关简介: 文章目录 第一篇博客,与您共勉 个人介绍 学习的一些计划: 最后 个人介绍 ...

  7. 【个人随笔】我的第一篇博客(为什么、写什么、怎么写)

    关于这个博客(Ezrealer) 旧平台.新博客 这是我在这个博客下的第一篇博客,却是我使用CSDN的第N篇博客了,之所以又开了个博客,是想统一一下域名和ID,万一以后打造个个人品牌之类的,可以说是强 ...

  8. 血泪般的教训-我的第一篇博客

    血泪般的教训-我的第一篇博客 血泪般,血泪般血泪般血泪般..... 记住,要记住!!!! 千万不要手贱地乱在电子产品上删东西. -- [ 吡了gou的经验001 ] 当我们用时Ubuntu时,切记!! ...

  9. 决策树经典算法ID3——我的第一篇博客

    简介 决策树是机器学习中一种常见的分类算法,属于有监督学习算法(至于什么是有监督学习,什么是无监督学习读者可以自行百度).决策树算法有多种,ID3算法是其中一种经典的决策树算法,这种算法的核心是信息熵 ...

最新文章

  1. java之字符串学习记录
  2. C++11:POD数据类型
  3. C++实现二分查找(递归方法和非递归方法)
  4. GBDT--简单理解
  5. C语言 · 身份证号码升级
  6. Codeforces Round #499 (Div. 2) Problem-A-Stages(水题纠错)
  7. DELPHI参数几个概念上的区别 收藏
  8. eclipse打包jar发布到linux下运行出错(java.lang.ClassNotFoundException: cmd.WordCount$MyMapper )
  9. AT4119-[ARC096C]Everything on It【斯特林数,容斥】
  10. 2022中国素质教育行业报告
  11. stm32驱动_STM32直流电机启动(一)驱动电路的介绍
  12. flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法
  13. 【论文导读】Selecting Data Augmentation for Simulating Interventions
  14. java复习/学习流程
  15. 11位大咖集结!和最专业的人,探讨“由内及外”的未来趋势 | 生辉 · 生命科学大会-1
  16. C++二进制数转十进制
  17. c代码生成matlab模块,使用 C Caller 模块集成 C 代码
  18. 总结在mac电脑上安装brew
  19. NAT(地址转换模式)
  20. 崇左市2021年各校高考成绩查询,2021年广西崇左各高中中考分数线及录取时间结果查询安排...

热门文章

  1. plex 乱码_最适合HTPC用户的Plex客户端是什么?
  2. 21 _ 服务调用失败时有哪些处理手段?
  3. 留学生计算机辅导请点这里
  4. 基于安卓和springboot的在线课堂设计
  5. 笔记本电脑一直插着电源对电池好不好?
  6. DHS:Blueprint for a Secure Cyber Future
  7. 64位ubuntu安装N64模拟器mupen64
  8. 李阳疯狂英语突破对话(40)-不要拐弯抹角
  9. lbm 弛豫时间_学习格子 Boltzmann 方法(LBM)该如何入门,需要有哪些前置知识?...
  10. windows10创建虚拟机时选择客户机操作系统遇到不支持64位操作系统问题