python股票数据的爬取与可视化分析
前⾔
 据东⽅财富⽹统计最新数据,中国股民⼈数超1.7亿
伴随着资本市场规模的扩⼤,投资者数量也在不断增长。据中国证券登记结算有限责任公司的数据,2016年1⽉,投资者⼈数正式突破1亿⼈。
截⾄2020年10⽉末,投资者⼈数达1.74亿⼈,抛开炒股技术不讲,这么多的股票数据⾮常难与统计,但我们能够使⽤⽹络爬⾍爬取股票的各种详细数据,再将这些数据进⾏整理与分析。
更直观的观看股票的数据情况从⽽进⾏对⽐
数据来源
爬⾍设计⽅案
1. 爬⾍名称
股票数据的爬取和数据清洗与分析
2. 爬取内容与数据特征分析
oracle教程免费爬取所有股票的信息并进⾏对⽐分析
3. ⽅案概述
分析⽹站的页⾯结构,到爬取的位置,制定⽅案,保存成csv⽂件
⽹站页⾯的结构与特征分析
主页中包括了各种市场的股票,⽽我们从中筛选沪深股市进⾏爬取,
点击后从⽹站截图可以看出,该⽹站有两个结构分为左区的股市总览,中间这⼀部分是股票的具体数据,此区域就是我们需要爬取的区域
⽹站的Htmls 页⾯解析与
节点(标签)查⽅法与遍历⽅法
检查⽹站源代码发现有许多数据,此时我们筛选出XHR数据
筛选出后发现⼀条内容点进去
进⼊后从中可以得知总共有4432条数据
继续展开发现数据都在列表⾥⾯
展开第⼀条数据,发现第⼀条数据的名称与⽹站上的第⼀条数据相对应
那么从上推断可以得出4432条是所有股票的记录
然后从股票数据中,来定位数据的标签
⽹络爬⾍程序设计
1. 爬取数据
(1)股票数据爬取并保存
1import requests
2import csv
3
4
5
6#打开⼀个⽂件并命名
7 file = open('data.csv', mode='a', encoding='utf-8', newline='')
8#使⽤DictWriter⽅法以字典形式写⼊
9 csv_write = csv.DictWriter(file, fieldnames=['股票代码', '股票名称', '当前价', '涨跌额', '涨跌幅', '年初⾄今', '成交量', '成交额', '换⼿率', '市盈率(TTM)',
10'股息率', '市值'])
11
12 csv_write.writeheader()  #写⼊⼀次表头数据
13
14
15#原本⽹页⼀页最多只能显⽰90⽀股票数据,通过查看结合页数计算⼀共有4432⽀股票数据修改url中的size 以达到获取全部股票数据
16 url = 'xueqiu/service/v5/stock/screener/quote/list?page=1&size=4432&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz&_=1623304455997'
17 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}#遭遇反爬加请求参数
18# 发送⽹络请求
19 response = (url=url, headers=headers)
20 json_data = response.json()
21
22# 数据筛选
23 data_list = json_data['data']['list']
24for data in data_list:      #建⽴for循环把列表数据遍历出来
25# print(data) #解析数据
26#设置data取键值对手机网页视频怎么下载到本地视频
python请求并解析json数据>网站添加qq客服代码27    data1 = data['symbol']
28    data2 = data['name']
29    data3 = data['current']
30    data4 = data['chg']
31if data4:
32if float(data4) > 0:
33            data4 = '+' + str(data4)
34else:
35            data4 = str(data4)
36    data5 = str(data['percent']) + '%'
37    data6 = str(data['current_year_percent']) + '%'
38    data7 = data['volume']
39    data8 = data['amount']
40    data9 = str(data['turnover_rate'])+'%'
fraction在数学中含义41    data10 = data['pe_ttm']
42    data11 =data['dividend_yield']
43if data11:
44        data11 = str(data['dividend_yield'])+'%'
45else:
46        data11 = None
47    data12 = data['market_capital']
48print(data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12,)
49
50#数据保存
51    data_dict = {'股票代码': data1, '股票名称': data2, '当前价': data3, '涨跌额': data4, '涨跌幅': data5, '年初⾄今': data6, 52'成交量': data7, '成交额':data8, '换⼿率': data9, '市盈率(TTM)': data10, '股息率': data11, '市值': data12, } 53    csv_write.writerow(data_dict)
2. 数据查看并清洗
1import pandas as pd
2import numpy as np
3#加载csv数据
4 data_df = pd.read_csv('data.csv')
5#显⽰头⽂件
原码反码补码必须是8位吗6 data_df.head()
7#判断数据⾏中书是否存在缺失值
8 data_df.isnull().any(axis=1)
从中发现还是有缺失值存在,所以我们选择进⾏⽤0填充
1#将缺失值都补为0
2 data_df = data_df.fillna(0)
3#再次查看数据⾏中书是否修改成功
4 data_df.isnull().any(axis=1)
填充成功,数据⾥已⽆缺失值
1#再次查看数据⾏
2 data_df.head()
1#统计每⼀列空值的个数:
2 data_df.isnull().any().sum()
进⾏排序,因为我们只取成交量前⼗的⼗⽀股票来进⾏数据对⽐操作1#让值从⼤到⼩进⾏排序
2 df = data_df.sort_values(by='成交量',ascending=False)
3 data_df.head(10)
保存处理后的数据
1#保存处理后的数据
2import pandas as pd
3 df = df.set_index('股票名称')
_csv("data1.csv",encoding='utf-8')
5 data_df = pd.read_csv("data1.csv")
读取处理后的数据
1#读取处理后的数据
2 data_df = pd.read_csv('data1.csv')
3 df = data_df.dropna()
4 df1 = df[['股票名称', '成交量']]
5 data_df.sort_values(by='成交量',ascending=False)
6#取前10条股票
7 df2 = df1.iloc[:10]
8#打印出来显⽰检查结果是否正确
9print(df2['股票名称'].values)
10print(df2['成交量'].values)
导⼊相关图包
绘制成交量柱形图进⾏对⽐

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。