爬虫 数据可视化

2023-11-06

爬虫-可视化界面柱状图

交作业啦,最近在学习爬虫,由于基础性学习太慢,对于我这种急性子的人直接去 B站找了一个完整的例子直接上手做了。

就是爬取一个页面的内容,并把爬取下来的数据可视化,用柱状图直观表示出来。
直接上代码吧

import requests
import pprint
import csv

file = open('data.csv', mode='a', encoding='utf-8', newline='') #a表示数据的追加
csv_write = csv.DictWriter(file,fieldnames=['股票代码','股票名称','当前价','涨跌额','涨幅额','年初至今','成交量','成交额','换手率','市盈率','股息率','市值'])
csv_write.writeheader()#写入一次表头数据
for page in range(1,53):
    print('----------正在抓取第{}页数据----------------------'.format(page))
    #1.确定url地址(链接地址)<分析网页性质>
    url='https://xueqiu.com/service/v5/stock/screener/quote/list?page={}&size=30&order=desc&order_by=amount&exchange=CN&market=CN&type=sha&_=1627646170409'.format(str(page))

    headers={
       
    }
    #2.发送网络请求

    response=requests.get(url=url,headers=headers)
    print(response)
    json_data=response.json()
    #pprint.pprint(json_data)

    #3.数据解析1(筛选数据)
    data_list=json_data['data']['list']

    for data in data_list:
        #print(data)

        data1 = data['symbol']
        data2 = data['name']
        data3 = data['current']
        data4 = data['chg']
        if data4:
            if float(data4) > 0:
                data4='+'+str(data4)
            else:
                data4=str(data4)
        data5 = str(data['percent'])+'%'
        data6 = str(data['current_year_percent']) + '%'
        data7 = data['volume']
        data8 = data['amount']
        data9 = str(data['turnover_rate'])+ '%'
        data10= data['pb_ttm']
        data11 = data['dividend_yield']
        if data11:
            data11=str (data['dividend_yield'])+ '%'
        else:
            data11=None
        data12 = data['market_capital']
        print(data1,data2,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12)

        #4.保存数据
        data_dict={'股票代码':data1,'股票名称':data2,'当前价':data3,'涨跌额':data4,'涨幅额':data5,'年初至今':data6,'成交量':data7,'成交额':data8,'换手率':data9,'市盈率':data10,'股息率':data11,'市值':data12}

        csv_write.writerow(data_dict)

从页面爬下数据之后,开始可视化处理

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
data_df = pd.read_csv('data.csv')
df = data_df.dropna()#过滤缺失数据
'''
DataFrme.dropna(axis=0,how=’any’,thresh=None,subset=None,inplace=False)
参数:
axis: 默认axis=0。0为按行删除,1为按列删除
how: 默认 ‘any’。 ‘any’指带缺失值的所有行/列;'all’指清除一整行/列都是缺失值的行/列
thresh: int,保留含有int个非nan值的行
subset: 删除特定列中包含缺失值的行或列
inplace: 默认False,即筛选后的数据存为副本,True表示直接在原数据上更改

'''
df1 = df[['股票名称','成交量']]
df2 = df1.iloc[:20]#iloc函数:通过行号来取行数据
print(df2['股票名称'].values)
print(df2['成交量'].values)

c = (
    Bar(init_opts=opts.InitOpts(width="1500px", height="700px"))
        .add_xaxis(list(df2['股票名称'].values))
        .add_yaxis("股票成交情况",list(df2['成交量'].values))
        .set_global_opts(
        title_opts=opts.TitleOpts(title="成交量图表-Volume chart"),
        datazoom_opts=opts.DataZoomOpts(),
    )
        .render("data.html")
)


这其中遇到的问题是由与柱状图当初没有设置图表画布宽度,使用默认值,最初显示的柱状图x轴并没有把每个点对应的是什么显示出来。

 
class InitOpts(
    # 图表画布宽度,css 长度单位。
    width: str = "900px",
 
    # 图表画布高度,css 长度单位。
    height: str = "500px",
 
    # 图表 ID,图表唯一标识,用于在多图表时区分。
    chart_id: Optional[str] = None,
 
    # 渲染风格,可选 "canvas", "svg"
    # # 参考 `全局变量` 章节
    renderer: str = RenderType.CANVAS,
 
    # 网页标题
    page_title: str = "Awesome-pyecharts",
 
    # 图表主题
    theme: str = "white",
 
    # 图表背景颜色
    bg_color: Optional[str] = None,
 
    # 远程 js host,如不设置默认为 https://assets.pyecharts.org/assets/"
    # 参考 `全局变量` 章节
    js_host: str = "",
 
    # 画图动画初始化配置,参考 `global_options.AnimationOpts`
    animation_opts: Union[AnimationOpts, dict] = AnimationOpts(),
)
 
         Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC,width="1200px",height="300px",chart_id='efg123',renderer='RenderType.SVG'))
'''
def add_yaxis(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,
    # 系列数据
    y_axis: Sequence[Numeric, opts.BarItem, dict],
    # 是否选中图例
    is_selected: bool = True,
    # 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
    xaxis_index: Optional[Numeric] = None,
    # 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
    yaxis_index: Optional[Numeric] = None,
    # 是否启用图例 hover 时的联动高亮
    is_legend_hover_link: bool = True,
    # 系列 label 颜色
    color: Optional[str] = None,
    # 是否显示柱条的背景色。通过 backgroundStyle 配置背景样式。
    is_show_background: bool = False,
    # 每一个柱条的背景样式。需要将 showBackground 设置为 true 时才有效。
    background_style: types.Union[types.BarBackground, dict, None] = None,
    # 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
    stack: Optional[str] = None,
    # 柱条的宽度,不设时自适应。
    # 可以是绝对值例如 40 或者百分数例如 '60%'。百分数基于自动计算出的每一类目的宽度。
    # 在同一坐标系上,此属性会被多个 'bar' 系列共享。此属性应设置于此坐标系中最后一个 'bar' 系列上才会生效,并且是对此坐标系中所有 'bar' 系列生效。
    bar_width: types.Union[types.Numeric, str] = None,
    # 柱条的最大宽度。比 barWidth 优先级高。
    bar_max_width: types.Union[types.Numeric, str] = None,
    # 柱条的最小宽度。在直角坐标系中,默认值是 1。否则默认值是 null。比 barWidth 优先级高。
    bar_min_width: types.Union[types.Numeric, str] = None,
    # 柱条最小高度,可用于防止某数据项的值过小而影响交互。
    bar_min_height: types.Numeric = 0,
    # 同一系列的柱间距离,默认为类目间距的 20%,可设固定值
    category_gap: Union[Numeric, str] = "20%",
    # 不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。
    # 如果想要两个系列的柱子重叠,可以设置 gap 为 '-100%'。这在用柱子做背景的时候有用。
    gap: Optional[str] = "30%",
    # 是否开启大数据量优化,在数据图形特别多而出现卡顿时候可以开启。
    # 开启后配合 largeThreshold 在数据量大于指定阈值的时候对绘制进行优化。
    # 缺点:优化后不能自定义设置单个数据项的样式。
    is_large: bool = False,
    # 开启绘制优化的阈值。
    large_threshold: types.Numeric = 400,
    # 使用 dimensions 定义 series.data 或者 dataset.source 的每个维度的信息。
    # 注意:如果使用了 dataset,那么可以在 dataset.source 的第一行/列中给出 dimension 名称。
    # 于是就不用在这里指定 dimension。
    # 但是,如果在这里指定了 dimensions,那么 ECharts 不再会自动从 dataset.source 的第一行/列中获取维度信息。
    dimensions: types.Union[types.Sequence, None] = None,
    # 当使用 dataset 时,seriesLayoutBy 指定了 dataset 中用行还是列对应到系列上,也就是说,系列“排布”到 dataset 的行还是列上。可取值:
    # 'column':默认,dataset 的列对应于系列,从而 dataset 中每一列是一个维度(dimension)。
    # 'row':dataset 的行对应于系列,从而 dataset 中每一行是一个维度(dimension)。
    series_layout_by: str = "column",
    # 如果 series.data 没有指定,并且 dataset 存在,那么就会使用 dataset。
    # datasetIndex 指定本系列使用那个 dataset。
    dataset_index: types.Numeric = 0,
    # 是否裁剪超出坐标系部分的图形。柱状图:裁掉所有超出坐标系的部分,但是依然保留柱子的宽度
    is_clip: bool = True,
    # 柱状图所有图形的 zlevel 值。
    z_level: types.Numeric = 0,
    # 柱状图组件的所有图形的z值。控制图形的前后顺序。
    # z值小的图形会被z值大的图形覆盖。
    # z相比zlevel优先级更低,而且不会创建新的 Canvas。
    z: types.Numeric = 2,
    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
    # 标记点配置项,参考 `series_options.MarkPointOpts`
    markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,
    # 标记线配置项,参考 `series_options.MarkLineOpts`
    markline_opts: Union[opts.MarkLineOpts, dict, None] = None,
    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
    # 可以定义 data 的哪个维度被编码成什么。
    encode: types.Union[types.JSFunc, dict, None] = None,
)
'''

最后成果
在这里插入图片描述

参考资料:[1]https://blog.csdn.net/weixin_47723732/article/details/113860234
[2]https://blog.csdn.net/zhaoyangjian724/article/details/103402191
[3]https://www.bilibili.com/video/BV1vt4y1v7oJfrom=search&seid=5714856360443427054

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫 数据可视化 的相关文章

随机推荐

  • 【系统篇 / 安装】❀ 01. 安装镜像 ISO 文件下载 ❀ Windows Server 2016

    简介 2016年10月13日 微软正式发布Windows Server 2016和System Center 2016 全球可用 用户可以到MSDN VLSC 批量授权服务中心 获取下载 服务器2016走的路线和以前一样 新的Windows
  • 帆软认证报表工程师FCRA试题

    Part 1 判断题 总分 48分 第1题 判断题 智能运维 负载管理中 实时负载通过使用图表直观的展示当前系统的最多最近半小时内存利用率和CPU利用率 满分 2分 正确答案 A 第2题 判断题 远程设计连接时 本地设计器版本和服务器工程的
  • 全国程序员高考卷曝光,你能答对几题?

    普通高等学校招生全国统一考试 程序员卷 1 本试卷分为单选题 简答题 编程题三种类型 选择题每题5分 简答题每题10分 编程题每题20分 2 考试时间为30分钟 3 全部答案请填写在本文评论区 4 考试结束后 请将本试卷分享到CSDN AP
  • java 模拟用户注册

    模拟用户注册 用户输入用户名 密码 确认密码 生日 格式为yyyy MM dd 手机号 长度为11位 并且以13 15 17 18开头的手机号码为正确 之后 判断信息正确后 验证用户是否重复 重复则给出相应提示 不重复则注册成功 此案例使用
  • web安全攻防渗透测试实训笔记

    1 Nmap的基本 Nmap ip 6 ip Nmap A 开启操作系统识别和版本识别功能 T 0 6档 设置扫描的速度 一般设置T4 过快容易被发现 v 显示信息的级别 vv显示更详细的信息 192 168 1 1 24 扫描C段 192
  • Class 03 - R语言的 Vectors(向量) 与 lists(列表)

    Class 03 R语言的 Vector与 列表 list R语言语法 脚本文件的创建 保存 和修改名称 第一个函数 使用帮助功能查看函数详细说明 语法问题 变量与赋值 定义变量名称格式 调用变量 R中的数据结构 Vectors 向量 创建
  • STM32移植FreeRTOS的Tips

    转自 http bbs armfly com read php tid 7140 1 在FreeRTOS的demo文件夹中拷贝对应的FreeRTOSConfig h文件后 需要加入一行 define configUSE MUTEXES 1
  • Http协议和Https协议的区别

    Http协议我们就不多说了 这篇主要就是简单的提提Https协议 Https协议是基于Http协议开发的 它是一个安全的通信通道 用于客户端和服务器端进行信息的交换 它主要使用了安全套接字层 SSL 来来进行信息的交换的 简单的说它就是Ht
  • 【设计模式】用Java实现装饰模式

    一 装饰模式介绍与使用场景 装饰模式 Decorator Pattern 是一种结构型设计模式 它允许在不改变现有对象结构的情况下 动态地将责任附加到对象上 装饰模式通过将对象包装在装饰器对象中 形成一条装饰链 每个装饰器对象都可以在被装饰
  • QML笔记(六)之QML自定义信号的创建与使用

    一 前言 信号槽是Qt的核心所在 不管是对于QtWidgets还是QML都是 连接自带的信号槽很容易就就比较容易 但有时候自带的信号槽不能满足我们的业务需要 于是就需要自定义信号 在需要的时候扔出 然后处理 自定义信号的使用场景一般都是组件
  • 概率论与数理统计(一)随机事件,样本空间

    1 D 2 A 3 C 4 AD 5 正确答案 1 2 1 3 2 1 2 3 3 1 3 2
  • [seaborn] seaborn学习笔记7-常用参数调整Adjustment of Common Parameters

    文章目录 7 常用参数调整Adjustment of Common Parameters 1 主题设置 themes adjustment 2 颜色设置 Manage colors 3 轴的管理 Manage axis 4 边距调整 Man
  • Client-Initiated场景下的L2TP实验配置

    目录 LNS配置 配置业务 认证方案 配置认证域以及用户 配置VT接口
  • Idea关闭coverage

    别问我为何知道 手滑惹的祸 解决方式 一 Ctrl Alt F6 取消勾选 选择Show selected 二 点击右侧边栏Coverage 点击X 三 Run gt Hide coverage
  • 管螺纹如何标注_关于管螺纹

    管螺纹 管螺纹分为55 非密封管螺纹与55 密封管螺纹两种 55 非密封管螺纹 GB T7307 2001 不具有密封性 若要求此联结具有密封性 应在螺纹以外设计密封面结构 在密封面内添加合适的密封介质 利用螺纹将密封面锁紧密封 标记 圆柱
  • C语言 文本文件读取、写入与定位(详细介绍)

    目录 文本文件相关介绍 1 打开文件 2 文件的读取 1 fgetc 函数 2 fgets 函数 3 fscanf 函数 4 fread 函数 3 关闭文件 fclose FILE stream 4 文件的写入 1 fpuc 函数 2 fp
  • Unity空间变换基础

    Unity空间变换基础 模型空间 unity空间开始的起点 左手坐标系 模型空间是美术在制作模型的时候确定的 世界空间 unity 中最外围的坐标系 左手坐标系 世界空间转换到模型空间 需要使用 坐标系的转换 p c Unity3d数学基础
  • agx 安装ros opencv_基于paddledetection在ROS中搭建红绿灯检测控制车模运动(1)

    前言 本来想直接用百度智能车比赛的数据集训练 但是发现在ROS中搭建红绿灯模型和提供的数据集在颜色亮度外形上都有点差别 无奈从创建数据集开始 目录 基于paddledetection在ROS中搭建红绿灯检测控制车模运动 1 环境搭建准备以及
  • JVM中的方法区

    文章目录 JVM中的方法区 运行时数据区结构图 栈堆方法区的交互关系 方法区在哪里 方法区的基本理解 Hotspot中方法区的演进 设置方法区大小与OOM jdk7及以前 jdk8及以后 方法区的内部结构 class字节码文件中常量池 方法
  • 爬虫 数据可视化

    爬虫 可视化界面柱状图 交作业啦 最近在学习爬虫 由于基础性学习太慢 对于我这种急性子的人直接去 B站找了一个完整的例子直接上手做了 就是爬取一个页面的内容 并把爬取下来的数据可视化 用柱状图直观表示出来 直接上代码吧 import req