Python爬虫获取基金变动信息

目录
  • 1 前言
  • 2 抓取变动信息
    • 2.1 基金的变动信息获取
    • 2.2 基金阶段信息的抓取
  • 3 最终结果展现

1 前言

前面文章Python爬虫获取基金列表、Python爬虫获取基金基本信息我们已经介绍了怎么获取基金列表以及怎么获取基金基本信息,本文我们继续前面的内容,获取基金的变动信息。这次获取信息的方式将组合使用页面数据解析和api接口调用的方式进行。

2 抓取变动信息

我们通过观察基金基本信息页面,我们可以发现有关基金变动信息的页面可以包含以下4个部分:

接下来说一下我们抓取数据的思路,在第一个图中我们已经得到了基金的基本信息,变动信息和阶段涨幅,但是阶段涨幅已经在第2个图中得到了展示,所以在这个图中,我们只需要获取实时的涨跌以及前一日的基金净值即可。

2.1 基金的变动信息获取

# 基金的变动信息,我们还是从一个简单的连接开始,其他基金的获取方式是和这个类似,
# 访问地址换上其他的基金代码即可。
http://fund.eastmoney.com/005585.html

这里获取变动分为两个部分,一部分是实时获取基金的变动新,会发现净值估算是过一段时间会发生变化,通过监控浏览器的访问请求记录,抓取到了这样一个api访问,瞬间就乐开了花。

// http://fundgz.1234567.com.cn/js/005585.js
{
	'fundcode': '005585',
	'name': '银河文体娱乐混合',
	'jzrq': '2021-11-16',
	'dwjz': '1.6718',
	'gsz': '1.6732',
	'gszzl': '0.08',
	'gztime': '2021-11-17 15:00'
}

基金代码和基金名称可以根据json返回的内容可以知道,但是 jzrq,dwjz,gsz,gszzl,gztime都是什么意思呢,我仔细研究了很长时间,结合页面上展示的内容,再加上dfcf编码中文拼音的首字母的习惯,我猜这些字段的意思大致是净值日期、单位净值、估算值、估算增长率、估算时间。我都有点儿沾沾自喜了,竟然破解出来了其中的奥义。

第二部分是获取基金的单位净值,这个通过分析发现数据是包含在一个<dl class="dataItem02"> 的 html 元素中的,我们获取的方式是通过 bs4的方式解析返回页面信息来抓取元素解析dom树来获取。

总结一下就是我们通过 api 接口调用来获取基金的实时变动信息,通过解析返回的 html,解析dom树来获取基金的单位净值信息。以下是第一部分抓取信息的代码。

# 抓取基金实时变动信息
resp = requests.get("http://fundgz.1234567.com.cn/js/{}.js".format(code))
# 去除js的呢绒方便进行数据的json转化
data = resp.text.replace("jsonpgz(", "").replace(");", "")
body = json.loads(data)
# 输出获取到的结果数据
print("{} {} 估算值 {} 估算涨跌 {} 估算时间 {}".format(body["fundcode"], body["name"], body["gsz"], body["gszzl"], body["gztime"]))
# 请求获取基金页面的信息
response = requests.get("http://fund.eastmoney.com/{}.html".format(code))
# 打印原始的请求返回报文编码方式
# print(response.apparent_encoding)
# 设置请求的返回内容编码方式,避免出现控制台乱码的情况
response.encoding = "UTF-8"
resp_body = response.text
# 进行数据的转换和解析
soup = BeautifulSoup(resp_body, 'lxml')
# 因为确定了只有一个元素,因此可以使用 find 发放来获取数据,这个就是查找 dl标签,class=dataItem02 的元素
dl_con = soup.find("dl", class_="dataItem02")

# 获取基金净值的更新时间
value_date = dl_con.find("p").get_text()
# 只提取基金数据的时间即可
value_date = value_date.replace("单位净值", "").replace("(", "").replace(")", "")
# 净值数据和涨跌百分比数据是在dd标签下的两个p标签中
value_con = dl_con.find("dd", class_="dataNums")
data_list = value_con.find_all("span")
val_data = data_list[0].get_text()
per_data = data_list[1].get_text()
print("基金净值日期 {} 净值数据 {} 涨跌百分比 {}".format(value_date, val_data, per_data))

最终,我们通过以上的操作,就可以获取到基金的变动信息。

2.2 基金阶段信息的抓取

基金的阶段信息抓取也是采用 bs4 解析页面数据的方式进行操作,这里分为三个图,第一个图展示的是阶段的涨跌信息,第二个和第三个是季度和年度的涨跌信息,因为最后我们要进行格式化的存储,对于第一个图我们可以进行结构化行模式存储,可以做到每天的变化展示,但是二和三我们要采用列模式的存储,作为一种统计数据进行查询。因为两种方式的解析方式不同,一图中的表头字段在数据库中是作为字段存在的,所以我们不需要关心,二和三需要获取表格的表头进行存储,统计的事件也是我们存储的数据。再有就是我们不仅要得到基金的基本信息,还要获取到沪深300的相关信息,以后方便在做筛选时作为一个强度指标进行基准判断,所以沪深300的数据也需要进行抓取,这一部分的操作难度不大,主要是在于分析获取的数据方式以及后续进行存储思路。

我这里是直接获取页面所有的table 元素,然后进行循环输出结果,然后获取需要抓取的数据在那个下标。

这里我就直接贴一下代码进行说明:

# 打印表格
def print_table(head, body):
    tb = PrettyTable()  # 生成表格对象
    tb.field_names = head  # 定义表头
    tb.add_row(body)
    print(tb)
# 查询季度 年度数据
def query_year_quarter(data_list, num):
    stage_list = data_list.find_all("tr")[0].find_all("th")
    head_list = []
    for nd in stage_list:
        val = nd.get_text().strip()
        val = val.replace("季度", "").replace("年度", "").replace("年", "-")
        if val:
            # print(nd.get_text())
            head_list.append(val)
    body_list = []
    stage_list = data_list.find_all("tr")[num].find_all("td")
    for nd in stage_list:
        val = nd.get_text()
        if "阶段涨幅" in val or "沪深300" in val:
            continue
        body_list.append(val.replace("%", ""))
    # 打印表格
    print_table(head_list, body_list)
# 获取基金基本信息这里只是贴了部分代码,需要把获取净值部分的信息进行组合才能够运行
def query_fund_basic(code="005585", hsFlag=False):
    # 阶段涨幅表头
    stage_head_list = ["stage_week", "stage_month", "stage_month3", "stage_month6", "stage_year", "stage_year1","stage_year2", "stage_year3", ]
    stage_list = body_list[11].find_all("tr")
    # 获取第2个是基金情况 获取第4个是hs300情况
    num = 1
    if hsFlag:
        num = 3
    tmp_list = []
    for nd in stage_list[num].find_all("td"):
        val = nd.get_text()
        if "阶段涨幅" in val or "沪深300" in val:
             continue
        tmp_list.append(val.replace("%", ""))
    # 打印阶段幅度表格
    print("\t------阶段涨跌------")
    print_table(stage_head_list, tmp_list)
    print("\t------季度涨跌------")
    query_year_quarter(body_list[12], num)
    print("\t------年度涨跌------")
    query_year_quarter(body_list[13], num)

3 最终结果展现

由于篇幅有限,本次代码就不在文内进行展示,后续我会把内容维护在github上进行提供。

到此这篇关于Python爬虫获取基金变动信息的文章就介绍到这了,更多相关Python获取信息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解如何使用Python网络爬虫获取招聘信息

    目录 前言 项目目标 项目准备 反爬措施 项目实现 效果展示 小结 前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. 项目目标 获取招聘信息,并批量把地点. 公司名.工资 .下载保存在txt文档. 项目准备 软件:PyCharm 需要的库:requests.lxml.fake_useragent 网站如下: https://gz.58.com/job/

  • Python爬虫获取基金基本信息

    目录 1 前言 2 如何抓取基本信息 3 xpath 获取数据 4 bs4 获取数据 5 最终结果展现 1 前言 上篇文章Python爬虫获取基金列表我们已经讲述了如何从基金网站上获取基金的列表信息.这一骗我们延续上一篇,继续分享如何抓取基金的基本信息做展示.展示的内容包括基金的基本信息,诸如基金公司,基金经理,创建时间以及追踪标.持仓明细等信息. 2 如何抓取基本信息 # 在这里我就直接贴地址了,这个地址的获取是从基金列表跳转,然后点基金概况就可以获取到了. http://fundf10.ea

  • Python 获取异常(Exception)信息的几种方法

    异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种 Python 中获取异常信息的方法,这里获取异常(Exception)信息采用 try-except- 程序结构. 如下所示: try: print(x) except Exception as e: print(e) 1. str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型,如: try: print(x) except Exception as e: print(str(e)) 打印结

  • python实现对svn操作及信息获取

    目录 一.实现效果 二.完整代码 三.结果展示.代码解析 1.上述代码最终会有两个输出展示 2.代码解析 一.实现效果 1.通过python获取路径下所有文件的svn状态 2.通过python对svn进行"提交.删除.锁.解锁.删除等操作" 3.通过svn打开小乌龟界面 二.完整代码 """ SVN状态对照表 """ class FileState: Normal = 0 # 000000 正常在svn管理下的最新的文件 Re

  • 用Python获取亚马逊商品信息

    目录 引言 一.获取亚马逊列表页的信息 二.获取详情页信息 三.代理设置 四.全部代码 总结 引言 亚马逊网站相较于国内的购物网站,可以直接使用python的最基本的requests进行请求.访问不是过于频繁,在未触发保护机制的情况下,可以获取我们想要的数据.本次通过以下三部分简单介绍下基本爬取流程: 使用requests的get请求,获取亚马逊列表和详情页的页面内容使用css/xpath对获取的内容进行解析,取得关键数据动态IP的作用及其使用方法 一.获取亚马逊列表页的信息 以游戏区为例: 获

  • Python如何获取模块中类以及类的属性方法信息

    目录 一.sys.modules模块 二.inspect模块 三.python获取模块中所有类的实例 总结 一.sys.modules模块 sys.modules是一个全局字典,python启动后就将该字典加载在内存中,每当导入新的模块时sys.modules都将记录这些导入模块.字典sys.modules对于加载模块起到了缓冲的作用. sys.modules拥有字典所拥有的一切方法.如: import sys print(sys.modules[__name__]) print(sys.mod

  • Python中BeautifulSoup通过查找Id获取元素信息

    比如如下的html 他是在span标签下的class为name,id为is-like-span 这样就可以通过这样的代码进行方法: isCliked = soup.find('span', id = 'is-like-span' 通过这种方式去获取即可,如果里面的为字符串则调用get_text()即可 到此这篇关于Python中BeautifulSoup通过查找Id获取元素信息的文章就介绍到这了,更多相关BeautifulSoup Id获取元素信息内容请搜索我们以前的文章或继续浏览下面的相关文章

  • Python爬虫获取基金变动信息

    目录 1 前言 2 抓取变动信息 2.1 基金的变动信息获取 2.2 基金阶段信息的抓取 3 最终结果展现 1 前言 前面文章Python爬虫获取基金列表.Python爬虫获取基金基本信息我们已经介绍了怎么获取基金列表以及怎么获取基金基本信息,本文我们继续前面的内容,获取基金的变动信息.这次获取信息的方式将组合使用页面数据解析和api接口调用的方式进行. 2 抓取变动信息 我们通过观察基金基本信息页面,我们可以发现有关基金变动信息的页面可以包含以下4个部分: 接下来说一下我们抓取数据的思路,在第

  • Python爬虫获取基金列表

    目录 1 前言 2 哪里去获取数据呢 3 怎么抓取数据呢 1 前言 python爬虫用来收集数据是最直接和常用的方法,可以使用python爬虫程序获得大量的数据,从而变得非常的简单和快速:绝大多数网站使用了模板开发,使用的模板可以快速生成大量相同布局不同内容的页面,这时只需要为一个页面开发爬虫程序,因为爬虫程序也可以对同一模板生成的不同内容进行爬取内容 2 哪里去获取数据呢 这里给大家准备好了,打开这个连接,就能找看到对应的基金信息: http://fund.eastmoney.com/jzzz

  • python爬虫之基金信息存储

    目录 1 前言 2 信息存储 2.1 基金基本信息存储 2.2 基金变动信息获取 3 需要改进的地方 3.1 基金类型 3.2 基金的更新顺序 4 总结 1 前言 前面已经讲了很多次要进行数据存储,终于在上一篇中完成了数据库的设计,在这一篇就开始数据的存储操作,在数据存储的这个部分,会将之前抓取到的基金列表,基金基本信息和基金变动信息以及ETF信息进行存储. 2 信息存储 2.1 基金基本信息存储 在这里获取基金信息包括两个部分,一部分是场外基金另外一部分是场外基金信息.之在前的文章中,我们已经

  • python爬虫获取淘宝天猫商品详细参数

    首先我是从淘宝进去,爬取了按销量排序的所有(100页)女装的列表信息按综合.销量分别爬取淘宝女装列表信息,然后导出前100商品的 link,爬取其详细信息.这些商品有淘宝的,也有天猫的,这两个平台有些区别,处理的时候要注意.比如,有的说"面料".有的说"材质成分",其实是一个意思,等等.可以取不同的链接做一下测试. import re from collections import OrderedDict from bs4 import BeautifulSoup

  • 50行Python代码获取高考志愿信息的实现方法

    最近遇到个任务,需要将高考志愿信息保存成Excel表格,BOSS丢给我一个网址表格之后就让我自己干了.虽然我以前也学习过Python编写爬虫的知识,不过时间长了忘了,于是摸索了一天之后终于完成了任务.不得不说,Python干这个还是挺容易的,最后写完一看代码,只用了50行就完成了任务. 准备工作 首先明确一下任务.首先我们要从网址表格中读取到一大串网址,然后访问每个网址,获取到页面上的学校信息,然后将它们在写到另一个Excel中.显然,我们需要一个爬虫库和一个Excel库来帮助我们完成任务. 第

  • python爬虫获取百度首页内容教学

    由传智播客教程整理,我们这里使用的是python2.7.x版本,就是2.7之后的版本,因为python3的改动略大,我们这里不用它.现在我们尝试一下url和网络爬虫配合的关系,爬浏览器首页信息. 1.首先我们创建一个urllib2_test01.py,然后输入以下代码: 2.最简单的获取一个url的信息代码居然只需要4行,执行写的python代码: 3.之后我们会看到一下的结果 4. 实际上,如果我们在浏览器上打开网页主页的话,右键选择"查看源代码",你会发现,跟我们刚打印出来的是一模

  • 详解用Python爬虫获取百度企业信用中企业基本信息

    一.背景 希望根据企业名称查询其经纬度,所在的省份.城市等信息.直接将企业名称传给百度地图提供的API,得到的经纬度是非常不准确的,因此希望获取企业完整的地理位置,这样传给API后结果会更加准确. 百度企业信用提供了企业基本信息查询的功能.希望通过Python爬虫获取企业基本信息.目前已基本实现了这一需求. 本文最后会提供具体的代码.代码仅供学习参考,希望不要恶意爬取数据! 二.分析 以苏宁为例.输入"江苏苏宁"后,查询结果如下: 经过分析,这里列示的企业信息是用JavaScript动

  • Python爬虫获取数据保存到数据库中的超详细教程(一看就会)

    目录 1.简介介绍 2.Xpath获取页面信息 3.通过Xpath爬虫实操 3-1.获取xpath 完整代码展示: 总结 1.简介介绍 -网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫.-一般在浏览器上可以获取到的,通过爬虫也可以获取到,常见的爬虫语言有PHP,JAVA,C#,C++,Python,为啥我们经常听到说的都是Python爬虫,这是

  • Python爬虫获取整个站点中的所有外部链接代码示例

    收集所有外部链接的网站爬虫程序流程图 下例是爬取本站python绘制条形图方法代码详解的实例,大家可以参考下. 完整代码: #! /usr/bin/env python #coding=utf-8 import urllib2 from bs4 import BeautifulSoup import re import datetime import random pages=set() random.seed(datetime.datetime.now()) #Retrieves a list

随机推荐