爬虫基础之爬取某基金网站+数据分析

embedded/2025/1/12 16:23:34/

声明: 本案例仅供学习参考使用,任何不法的活动均与本作者无关

网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台!


本案例所需要的模块:

1.requests          2.re(内置)           3.pandas           4.pyecharts

其他均需要 pip install 模块名

爬取步骤:


一.请求数据  模拟浏览器向服务器发送请求
 

 F12 打开开发者模式 点击网络  搜索我们需要的数据 找到正确的接口

老样子 使用工具能够使我们节约时间 方便快捷 但前提能够自己写就没问题


新建本地py文件复制过去 运行之后就可以看到与浏览器预览中一样的数据

接着我们需要对请求到的数据进行处理
这里我们使用正则是最好的
匹配所需的内容 即()里的

python">text = re.findall(r'datas:\[(.*?)\]',response.text)

二.提取数据 提取所需要的内容 

 然后我们观察放回的数据 把每条数据都提取出来

此时我们想该使用什么 去提取我们的数据呢  split字符串分割 or 正则
都不使用 此时选择eval函数去除引号 是最佳的选择

 处理完之后就是一个个的元组 之后我们可以遍历元组保存数据

接着就是多页数据的采集 通过观察每一页的URL可知 pi参数控制着我们的页码
嵌套个for循坏 实现 翻页的操作

三.保存数据  保存数据到本地

        因为这样保存的数据连个标头都没有 因此我们对照网站将表头写入

        根据我们所拿取的数据对照  麻烦的话直接复制我的代码

python">
# 保存的格式为utf-8-sig  单是utf-8的话会有乱码 看不懂 思密达with open('基金.csv', 'a', encoding='utf-8-sig', newline='\n') as f:f.write('基金代码,基金简称,English,日期,基金净值,基金累计净值,日增长率,基金近1周,基金近1月,基金近3月,基金近6月,基金近1年,基金近2年,基金近3年,今年来,成立来,False,False,False,False,手续费,False,False,False,False,False')


   后面发现需要进一步的处理csv文件里的数据 我就随便给个表头写入 后续通过pandas 提取所需要的列形成新的表格 

 以下是本案例的源代码 供大家交流使用

python">import requests
import re
import csvwith open('基金.csv', 'a', encoding='utf-8-sig', newline='\n') as f:f.write('基金代码,基金简称,English,日期,基金净值,基金累计净值,日增长率,基金近1周,基金近1月,基金近3月,基金近6月,基金近1年,基金近2年,基金近3年,今年来,成立来,False,False,False,False,手续费,False,False,False,False,False')
headers = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","Cache-Control": "no-cache","Connection": "keep-alive","Pragma": "no-cache","Referer": "https://fund.eastmoney.com/data/fundranking.html","Sec-Fetch-Dest": "script","Sec-Fetch-Mode": "no-cors","Sec-Fetch-Site": "same-origin","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0","sec-ch-ua": "\"Microsoft Edge\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\""
}
cookies = {"ASP.NET_SessionId": "2n3frbs0qlvk51gumxde43jz","st_si": "03571815072389","st_pvi": "42679690302429","st_sp": "2025-01-05%2020%3A21%3A57","st_inirUrl": "https%3A%2F%2Ffund.eastmoney.com%2Fdata%2F","st_sn": "1","st_psi": "20250105202156911-112200312936-7115758265","st_asi": "delete"
}
url = "https://fund.eastmoney.com/data/rankhandler.aspx"
for page in range(1,20):params = {"op": "ph","dt": "kf","ft": "all","rs": "","gs": "0","sc": "1nzf","st": "desc","sd": "2024-01-05","ed": "2025-01-05","qdii": "","tabSubtype": ",,,,,","pi": page,"pn": "50","dx": "1","v": "0.7427594655500473"}response = requests.get(url, headers=headers, cookies=cookies, params=params)text = re.findall(r'datas:\[(.*?)\]', response.text)[0]tuple_data = eval(text)for tup in tuple_data:with open('基金.csv', 'a', encoding='utf-8-sig', newline='\n') as f:f.write(tup)f.write('\n')

数据清洗模块 


准备步骤:
        下载pandas模块 pip install pandas

此时可以新建一个py文件 方便我们清洗数据

python"># 第一步导包
import pandas as pd# 读取文件
df = pd.read_csv('基金.csv')
# 获取该文件中所有的列名print(df.columns)

将我们所需要的复制下来   形成一个新的文件

python">import pandas as pddf = pd.read_csv('基金.csv')
# 语法df[['基金代码', '基金简称', 'English', '日期', '基金净值', '基金累计净值', '日增长率', '基金近1周',
'基金近1月', '基金近3月', '基金近6月', '基金近1年', '基金近2年', '基金近3年', '今年来', '成立来','手续费']].to_csv('基金_New.csv', index=False,encoding='utf-8-sig')print(df.columns)

        现在就看着舒服多了 

Explain:
        如下图所示的列名中的数字0保存到csv文件中会消失 但在pycharm中可以正常显示

数据可视化模块

python"># 导包
# 需要下载pyecharts
import pandas as pd
from pyecharts.charts import Line
from pyecharts.options import LabelOpts
from pyecharts import options as optsdf = pd.read_csv('基金_New.csv')
# 将每一列的数据转换成列表 因为下面的表格数据需要list类型的
name = df['基金简称'].tolist()
value = df['基金净值'].tolist()
value_2 = df['基金累计净值'].tolist()
value_3 = df['基金近1周'].tolist()
# 折线图的生成
line = (Line()# 生成x y轴的值.add_xaxis(name).add_yaxis('基金净值', value, markpoint_opts=opts.MarkPointOpts(# 只显示数据中的最小值和最大值data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")])).add_yaxis('基金累计净值',value_2,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")])).add_yaxis('基金近1周',value_3,markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")]))# 将数值不显示出来 这样美观些.set_series_opts(label_opts=opts.LabelOpts(is_show=False))).render('found.html')
# 最后生成html文件

 


http://www.ppmy.cn/embedded/153330.html

相关文章

彩漩科技入选2024AIGC赋能行业创新引领者及AI出海先锋

2024 年 12 月 26 日至 27 日,由中国产业海外发展协会指导、极新主办、前海香港科技青年之家与粤港澳大湾区青年创新创业中心联合主办的「重度垂直 2024 极新 AIGC 峰会」在深圳、香港两地隆重举行。彩漩科技荣登《2024 AIGC 赋能行业创新引领者消费 TOP20》和《20…

智元机器人完成 1000 台通用具身机器人下线

2025 年 1 月 6 日,智元机器人宣布其量产的第 1000 台通用具身机器人正式下线245。此次下线的机器人中,双足人形机器人 731 套,型号为远征 A2、灵犀 X1;轮式通用机器人 269 套,型号为远征 A2-D、A2-W57。 智元机器人位…

树的模拟实现

一.链式前向星 所谓链式前向星,就是用链表的方式实现树。其中的链表是用数组模拟实现的链表。 首先我们需要创建一个足够大的数组h,作为所有结点的哨兵位。创建两个足够大的数组e和ne,一个作为数据域,一个作为指针域。创建一个变…

Git之提交和撤销操作

文章目录 前言一、工作区、暂存区和版本库的概念1.介绍2.它们之间的关系 二、命令介绍1.git add2.git commit3.git log4.git status5.git diff6.git reset7.git reflog8.git checkout9.git rm [file] 三、.git目录总结 前言 本文从工作区,暂存区和版本库的概念引入, 介绍了Git…

网络安全系列 之 协议安全

1. SSL/TLS协议 对于HTTPS、FTPS等协议,其底层使用了SSL/TLS协议。 目前SSL/TLS协议版本共有5个:SSL2.0、SSL3.0、TLS1.0、TLS1.1、TLS1.2 SSL2.0禁止使用,原因:MD5做消息认证算法、容易受到中间人攻击从而被选择弱加密算法、加密…

Linux常用指令

目录 1 概述2 指令2.1 简单指令2.2 解压缩2.2.1 tar.bz2和tar.gz2.2.2 单独bz22.2.3 zip2.2.4 7z 2.3 网卡操作 1 概述 本章主要是记录一些日常用到的Linux指令,方便自己忘记的时候查找,也为有需要的人提供参考。 2 指令 2.1 简单指令 指令解释cat /…

双指针算法专题

目录 1. 移动零 1.1 算法原理 1.2 算法代码 2. 复写零 2.1 算法原理 2.2 算法代码 3. 快乐数 3.1 算法原理 3.2 算法代码 4. 盛水最多的容器 4.1 算法原理 4.2 算法代码 5. 有效三角形的个数 5.1 算法原理 5.2 算法代码 6. 剑指 offer:和为 s 的两个…

Tableau和PowerBI实现报表数据的下钻

Tableau实现报表数据下钻 用集操作实现树状图的数据下钻:连接数据源后,在类别字段上右键新建集。创建计算字段用于类别表头,将计算字段拖入视图,选中的集内成员显示自身,未被选中的显示加号。基于钻取字段创建下一层的…