Python爬虫获取基金持仓股票数据
Python爬虫小实战
.
通过Python爬虫获取基金持仓股票数据,按照基金持仓金额对股票进行排行,并储存在本地数据库。
from urllib import request
from bs4 import BeautifulSoup
import re
import pymysqlfundSharesList = []db =pymysql.connect(host = '127.0.0.1', port =3306,user = 'root',password = '109036',db = 'fund',charset = 'utf8'
)head={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
}find = {1:re.compile(r'html">(.*?)</a></td>'),2:re.compile(r'html">(.*?)</a></td>'),6:re.compile(r'">(.*?)</td>'),7:re.compile(r'">(.*?)</td>'),8:re.compile(r'">(.*?)</td>')
}def handle (a):flag = Falsefor i in range(0,len(fundSharesList)):if a[0] == fundSharesList[i][0]:fundSharesList[i][2] = round(float(fundSharesList[i][2]) + float(a[4]),2)flag =Truebreakif not flag:new = [a[0],a[1],a[4]]fundSharesList.append(new)if __name__=="__main__": funds = []fundNum = 0errorNum = 0send = request.Request("http://fund.eastmoney.com/js/fundcode_search.js",headers = head)response = request.urlopen(send)js = response.read().decode('utf-8')js = js[11:len(js)-3].split("],[")for i in range(0,len(js)):fund = str(js[i]).replace('"','')fund = fund.split(",")funds.append(fund)while fundNum < len(funds):fund_id = funds[fundNum][0]print(fund_id + " " + funds[fundNum][2])try:url = "http://fundf10.eastmoney.com/FundArchivesDatas.aspx?type=jjcc&code=" + str(fund_id) + "&topline=10&year=2020&month=&rt=0.21822537857648627"send = request.Request(url,headers = head)response = request.urlopen(send, timeout=10)html = response.read().decode('utf-8')bs =BeautifulSoup(html,"html.parser")find_list = bs.find_all("tbody")tr = find_list[0].find_all("tr")for i in tr:td = i.find_all("td")fundShares = []for j in range(0,len(td)):if j in [1,2,6,7,8]:a = re.findall(find[j],str(td[j]))[0]if j ==8 :a = str(a).replace(",","")if(len(a)>8):time.sleep(6)fundShares.append(a)handle(fundShares)print()errorNum = 0except Exception as e:print(fund_id + " 获取失败")print(e)if str(e) =="timed out" and errorNum <= 3:print("第" + str(errorNum) + "次超时,重试")errorNum = errorNum + 1fundNum = fundNum - 1print()fundNum = fundNum + 1# if fundNum == 1000:# break # 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor() try:for insert in fundSharesList:sql = "INSERT INTO fundShares VALUES ('"+ str(insert[0]) +"', '" + str(insert[1]) +"', " + str(insert[2]) + ");"print(sql)# 执行sql语句cursor.execute(sql)# 提交到数据库执行db.commit()except Exception as e:# 回滚db.rollback()raise Exception("插入数据库错误!", e)# 关闭数据库连接db.close()
结果分析:
建表语句
CREATE TABLE `fundshares` (`fundSharesId` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '股票代码',`fundSharesName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '股票名称',`fundSharesMoney` double(255, 2) NULL DEFAULT NULL COMMENT '金额(万元)',UNIQUE INDEX `unique`(`fundSharesId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
Python爬虫获取基金持仓股票数据相关推荐
- python爬虫获取基金数据2
用sklearn分析基金数据<1> python爬虫获取基金数据<2> 数据预处理:数据清洗.生成样本数据<3> 用sklearn训练样本数据<4> 用 ...
- 手把手教你利用 python 爬虫分析基金、股票
手把手教你利用 python 爬虫分析基金.股票 文章目录 手把手教你利用 python 爬虫分析基金.股票 第一步:基金数据爬取 第二步:股票增持计算 第三步:好股基金选取 桌面程序 exe 从前大 ...
- 用 Python 快速获取基金持仓增减情况 | 更新版
来源:Python数据之道 (ID:PyDataLab) 作者:阳哥 01写在前面 大家好,我是阳哥. 大家知道,在财经领域,Python是有着广泛的用途的.2021年,量化基金开始成为弄潮儿.有不少 ...
- 用 Python 快速获取基金持仓增值与减持情况
来源:Python数据之道 (ID:PyDataLab) 作者:阳哥 大家好,我是阳哥. 大家知道,在财经领域,Python是有着广泛的用途的,这不,最近A股成交量明显扩大,有不少消息说是量化类的基金 ...
- 星球年度汇总-爬虫获取基金持仓明细(附GUI可拿来就用}
量化交易是一个多技术综合的项目,学习完书籍<Python股票量化交易从入门到实践>我们提供了升级的学习内容--知识星球<玩转股票量化交易> 在星球中我们深入分享包括Python ...
- 现在还有人说Python 爬虫没用吗?股票数据定向爬虫让你轻松了解股势
说明 网站选择原则: 股票信息静态存在于html页面中,非js代码生成,没有Robbts协议限制. 选取方法: 打开网页,查看源代码,搜索网页的股票价格数据是否存在于源代码中. 需要相关python爬 ...
- 【转】Python之获取每日涨停板股票数据并绘制K线图!
利用tushare财经数据接口获取股市进行数据分析.并可视化的案例 1.导入所需要的库 import os import pandas as pd import tushare as ts impor ...
- Python之获取每日涨停板股票数据并绘制K线图!
利用tushare财经数据接口获取股市进行数据分析.并可视化的案例 1.导入所需要的库 import os import pandas as pd import tushare as ts impor ...
- python 爬虫 获取bilibili search搜索数据,返回json格式
话不多说直接上代码 测试用例 : 搜索java为关键词的 时长在60分钟以上的视频 import requests import json import osheaders = {"user ...
最新文章
- notepad++ 快捷键
- 通信信号处理中为什么要分为I、Q两路
- 用php获取header头信息
- 荣耀X8碎屏2020-05-14
- inspinia中文管理后台_Bootstrap优秀模板-INSPINIA.2.9.2
- java电力巡检系统 项目讲解_公司召开安全巡检系统APP试点项目上线启动会
- 2020华为软件精英挑战赛-有向图找环
- android下watchprosp和svc命令
- 分享MYSQL中的各种高可用技术
- 文献阅读(19)ISSCC 2020
- 共享计算机突然无法访问,共享的文件突然不能访问了电脑重启后又能访问为什么...
- RH358配置电子邮件传输--配置仅发送电子邮件服务
- xp重启计算机的快捷键,xp电脑关机重启快捷键是什么
- 导数、偏导数、梯度、方向导数、梯度下降、二阶导数、二阶方向导数
- 苹果待处理订单要多久_一个订单管理系统帮你轻松应对复杂的生产订单管理
- 从Dijkstra谈帅才的洞察力(王选)
- 栈的压入、弹出序列(Java)
- 芝诺悖论------芝诺的乌龟
- hexo添加valine评论系统 (yilia主题)
- Python综合实战-股票数据分析处理(查询接口)
热门文章
- 现在投资区块链还来得及吗?一个因素决定IPFS的颠覆价值
- 如何用html布天猫页面,天猫前端系列教材 (四十七)- 其他页面 - 登录页面
- 这可能是Python里最强的绘制地图神器
- 黑科技之机器人外骨骼
- Key Fact as Pivot: A Two-Stage Model for Low Resource Table-to-Text Generation 论文翻译
- python调用百度地图api定位_python 调用百度地图地点检索webAPI
- 支持DISTINCT的通用分页存储过程(SQL2005)
- 新华社 | 郭为:IT构架创新助力中国金融科技创新之路
- Flutter三天学会之后模仿美团界面
- typeScript学习(九)、function_type_参数限制_返回值类型