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

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

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

本案例所需要的模块:

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

其他均需要 pip install 模块名

爬取步骤:

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


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

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


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

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

复制代码
text = re.findall(r'datas:[(.*?)]',response.text)

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

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

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

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

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

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

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

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

复制代码
# 保存的格式为utf-8-sig  单是utf-8的话会有乱码 看不懂 思密达

with open('基金.csv', 'a', encoding='utf-8-sig', newline='
') as f:
    f.write(
        '基金代码,基金简称,English,日期,基金净值,基金累计净值,日增长率,基金近1周,基金近1月,基金近3月,基金近6月,基金近1年,基金近2年,基金近3年,今年来,成立来,False,False,False,False,手续费,False,False,False,False,False')

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

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

复制代码
import requests
import re
import csv

with open('基金.csv', 'a', encoding='utf-8-sig', newline='
') 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='
') as f:
            f.write(tup)
            f.write('
')

数据清洗模块

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

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

复制代码
# 第一步导包
import pandas as pd

# 读取文件
df = pd.read_csv('基金.csv')
# 获取该文件中所有的列名

print(df.columns)

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

复制代码
import pandas as pd

df = 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中可以正常显示

数据可视化模块

复制代码
# 导包
# 需要下载pyecharts
import pandas as pd
from pyecharts.charts import Line
from pyecharts.options import LabelOpts
from pyecharts import options as opts

df = 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文件
相关推荐
艺杯羹几秒前
从零搭建CSDN博客爬虫:Python爬虫+多格式导出完整教程
开发语言·爬虫·python·开源·gui·csdn
Betelgeuse7629 分钟前
从爬虫脚本到 AI 智能体:一次数据挖掘实践的完整进化
人工智能·爬虫·数据挖掘
计算机毕业编程指导师15 小时前
【计算机毕设推荐】Python+Hadoop+Spark共享单车数据可视化分析系统 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·课程设计
计算机毕业编程指导师15 小时前
【计算机毕设】基于Hadoop的共享单车订单数据分析系统+Python+Django全栈开发 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·hadoop·python·计算机·数据挖掘·spark·django
菩提树下的凡夫17 小时前
利用Python实现获取无人机图片并自动下载保存的简易爬虫
爬虫
码界奇点17 小时前
基于Python的微信公众号爬虫系统设计与实现
开发语言·爬虫·python·毕业设计·web·源代码管理
小白学大数据19 小时前
抖音搜索页数据批量爬取,多关键词同步采集实现
爬虫·python·数据分析
西贝爱学习19 小时前
智能手机规格与价格数据集
数据分析·数据集
夜郎king20 小时前
水力模型 INP 文件如何导入 QGIS?超详细实操教程
人工智能·数据挖掘·水力模型·qgis水力制图
计算机毕业编程指导师20 小时前
基于Spark的性格行为数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
大数据·python·数据挖掘·数据分析·spark·毕业设计·性格行为