用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境

production = title_list

tem = qy_num_2

colors = np.random.rand(len(tem)) # 颜色数组

plt.scatter(tem, production, s=200, c=colors) # 画散点图,大小为 200

plt.xlabel(‘数量’) # 横坐标轴标题

plt.xticks(rotation=270)

plt.ylabel(‘名称’) # 纵坐标轴标题

plt.savefig(f’净值散点图.png’)

plt.show()

在这里插入图片描述

生成柱状图

import matplotlib;matplotlib.use(‘TkAgg’)

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

plt.rcParams[‘axes.unicode_minus’] = False

zhfont1 = matplotlib.font_manager.FontProperties(fname=‘C:\Windows\Fonts\simsun.ttc’)

name_list = title_list

num_list = [float(i) for i in qy_num_1] # 单位净值

width = 0.5 # 柱子的宽度

index = np.arange(len(name_list))

plt.bar(index, num_list, width, color=‘steelblue’, tick_label=name_list, label=‘单位净值’)

plt.bar(index + width, qy_num_2, width, color=‘red’, hatch=‘\’, label=‘累计净值’)

plt.legend([‘单位净值’, ‘累计净值’], prop=zhfont1, labelspacing=1)

for a, b in zip(index, num_list): # 柱子上的数字显示

plt.text(a, b, ‘%.2f’ % b, ha=‘center’, va=‘bottom’, fontsize=7)

plt.xticks(rotation=270)

plt.title(‘净值柱状图’)

plt.ylabel(‘率’)

plt.legend()

plt.savefig(f’净值-柱状图’, bbox_inches=‘tight’)

plt.show()

在这里插入图片描述

源码展示:


!/usr/bin/nev python

--coding:utf8--

“”“ua大列表”“”

USER_AGENT_LIST = [

‘Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3451.0 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:57.0) Gecko/20100101 Firefox/57.0’,

‘Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2999.0 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.70 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2’,

‘Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174’,

‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; MS-RTC LM 8; InfoPath.2; Tablet PC 2.0)’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.61’,

‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.814.0 Safari/535.1’,

‘Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36’,

‘Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Touch; MASMJS)’,

‘Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1041.0 Safari/535.21’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3451.0 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:57.0) Gecko/20100101 Firefox/57.0’,

‘Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2999.0 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.70 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2’,

‘Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174’,

‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; MS-RTC LM 8; InfoPath.2; Tablet PC 2.0)’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.61’,

‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.814.0 Safari/535.1’,

‘Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36’,

‘Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; Touch; MASMJS)’,

‘Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1041.0 Safari/535.21’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4093.3 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko; compatible; Swurl) Chrome/77.0.3865.120 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4086.0 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:75.0) Gecko/20100101 Firefox/75.0’,

‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/91.0.146 Chrome/85.0.4183.146 Safari/537.36’,

‘Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36 VivoBrowser/8.4.72.0 Chrome/62.0.3202.84’,

‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.60’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:83.0) Gecko/20100101 Firefox/83.0’,

‘Mozilla/5.0 (X11; CrOS x86_64 13505.63.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:68.0) Gecko/20100101 Firefox/68.0’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Safari/537.36’,

‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36’,

‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400’,

‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Safari/537.36’,

]

from requests_html import HTMLSession

import os, xlwt, xlrd, random

from xlutils.copy import copy

import numpy as np

from matplotlib import pyplot as plt

from matplotlib.font_manager import FontProperties # 字体库

from lxml import etree

session = HTMLSession()

class DFSpider(object):

def init(self):

起始的请求地址----初始化

self.start_url = ‘http://fund.eastmoney.com/fund.html’

def parse_start_url(self):

“”"

发送请求,获取响应

:return:

“”"

请求头

headers = {

通过随机模块提供的随机拿取数据方法

‘User-Agent’: random.choice(USER_AGENT_LIST)

}

发送请求,获取响应字节数据

response = session.get(self.start_url, headers=headers).content

“”“序列化对象,将字节内容数据,经过转换,变成可进行xpath操作的对象”“”

response = etree.HTML(response)

“”“调用提取第二份响应数据”“”

self.parse_response_data(response)

def parse_response_data(self, response):

“”"

解析response响应数据,提取

:return:

“”"

股票名称

name_list_1 = response.xpath(‘//tbody/tr/td[5]/nobr/a[1]/text()’)

昨日单位净值

num_1_list_data_1 = response.xpath(‘//tbody/tr/td[6]/text()’)

昨日累计净值

num_2_list_data_1 = response.xpath(‘//tbody/tr/td[7]/text()’)

“”“调用解析三个列表的方法”“”

self.for_parse_three_list(name_list_1, num_1_list_data_1, num_2_list_data_1)

def for_parse_three_list(self, name_list, num_1_list, num_2_list):

“”"

解析循环,

:param name_list: 股票名称

:param num_1_list: 昨日单位净值

:param num_2_list: 昨日累计净值

:return:

“”"

遍历解析3个列表数据

for a, b, c in zip(name_list, num_1_list, num_2_list):

构造保存的excel字典数据

dict_data = {

会根据该字典的key值创建工作簿的sheet名

‘股票数据’: [a, b, c]

}

“”“调用解析保存excel表格方法”“”

self.parse_save_excel(dict_data)

print(f’企业:{a}----采集完成!')

“”“数据采集完成,调用分析生成图像方法”“”

self.parse_random_data(name_list, num_1_list, num_2_list)

def parse_random_data(self, name_list, num_1_list, num_2_list):

“”"

随机抽取15条数据,进行分析

:return:

“”"

存放随机号码的列表

index_list = []

for i in range(15):

随机抽取15个数据进行分析

random_num = random.randint(0, 200)

将随机抽取的号码添加进入准备的列表中

index_list.append(random_num)

“”“随机号码生成以后,调用解析生成四张分析图的方法”“”

self.parse_img_four_func(index_list, name_list, num_1_list, num_2_list)

def parse_img_four_func(self, index_list, name_list, num_1_list, num_2_list):

“”"

解析生成四张分析图

:param index_list: 随机数据的下标

:param name_list: 股票名称列表

:param num_1_list: 昨日单位净值列表

:param num_2_list: 昨日累计净值列表

:return:

“”"

title_list = [] # 名称

qy_num_1 = [] # 单位净值

qy_num_2 = [] # 累计净值

for index_num in index_list:

企业名称列表

title_list.append(name_list[index_num])

昨日单位净值列表

qy_num_1.append(num_1_list[index_num])

昨日累计净值列表

qy_num_2.append(num_2_list[index_num])

第一张图:根据净值生成折线图

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

plt.rcParams[‘axes.unicode_minus’] = False

plot中参数的含义分别是横轴值,纵轴值,线的形状,颜色,透明度,线的宽度和标签

plt.plot(title_list, qy_num_2, ‘ro-’, color=‘#4169E1’, alpha=0.8, linewidth=1, label=‘累计净值’)

plt.plot(title_list, qy_num_1, ‘ro-’, color=‘#69e141’, alpha=0.8, linewidth=1, label=‘单位净值’)

显示标签,如果不加这句,即使在plot中加了label='一些数字’的参数,最终还是不会显示标签

plt.legend(loc=“upper right”)

plt.xticks(rotation=270)

plt.xlabel(‘地点数量’)

plt.ylabel(‘工作属性数量’)

plt.savefig(‘根据净值生成折线图.png’)

plt.show()

第二张图:根据单位净值生成饼图

addr_dict_key = title_list

addr_dict_value = qy_num_1

plt.rcParams[‘font.sans-serif’] = [‘Microsoft YaHei’]

plt.rcParams[‘axes.unicode_minus’] = False

plt.pie(addr_dict_value, labels=addr_dict_key, autopct=‘%1.1f%%’)

plt.title(f’单位净值对比’)

plt.savefig(f’单位净值对比-饼图’)

plt.show()

第三张图:根据累计净值生成散点图

这两行代码解决 plt 中文显示的问题

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

plt.rcParams[‘axes.unicode_minus’] = False

输入岗位地址和岗位属性数据

production = title_list

tem = qy_num_2

colors = np.random.rand(len(tem)) # 颜色数组

plt.scatter(tem, production, s=200, c=colors) # 画散点图,大小为 200

plt.xlabel(‘数量’) # 横坐标轴标题

plt.xticks(rotation=270)

plt.ylabel(‘名称’) # 纵坐标轴标题

plt.savefig(f’净值散点图.png’)

plt.show()

第四张图:根据净值生成柱状图

import matplotlib;matplotlib.use(‘TkAgg’)

plt.rcParams[‘font.sans-serif’] = [‘SimHei’]

plt.rcParams[‘axes.unicode_minus’] = False

zhfont1 = matplotlib.font_manager.FontProperties(fname=‘C:\Windows\Fonts\simsun.ttc’)

name_list = title_list

num_list = [float(i) for i in qy_num_1] # 单位净值

width = 0.5 # 柱子的宽度

index = np.arange(len(name_list))

plt.bar(index, num_list, width, color=‘steelblue’, tick_label=name_list, label=‘单位净值’)

plt.bar(index + width, qy_num_2, width, color=‘red’, hatch=‘\’, label=‘累计净值’)

plt.legend([‘单位净值’, ‘累计净值’], prop=zhfont1, labelspacing=1)

for a, b in zip(index, num_list): # 柱子上的数字显示

plt.text(a, b, ‘%.2f’ % b, ha=‘center’, va=‘bottom’, fontsize=7)

plt.xticks(rotation=270)

plt.title(‘净值柱状图’)

plt.ylabel(‘率’)

plt.legend()

plt.savefig(f’净值-柱状图’, bbox_inches=‘tight’)

plt.show()

def parse_save_excel(self, data_dict):

“”"

保存数据

:return:

“”"

判断保存数据的文件夹是否存在,不存在,就创建

os_path_1 = os.getcwd() + ‘/数据/’

if not os.path.exists(os_path_1):

os.mkdir(os_path_1)

os_path = os_path_1 + ‘股票数据.xls’

if not os.path.exists(os_path):

创建新的workbook(其实就是创建新的excel)

workbook = xlwt.Workbook(encoding=‘utf-8’)

创建新的sheet表

worksheet1 = workbook.add_sheet(“股票数据”, cell_overwrite_ok=True)

excel_data_1 = (‘股票名称’, ‘昨日单位净值’, ‘昨日累计净值’)

for i in range(0, len(excel_data_1)):

worksheet1.col(i).width = 2560 * 3

行,列, 内容, 样式

worksheet1.write(0, i, excel_data_1[i])

workbook.save(os_path)

判断工作表是否存在

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值