学巴金发拉比菲特炒股(关于巴菲特炒股的技巧)


【51CTO原创稿件】沃伦·巴菲特( Warren Buffett),全球闻名的出资商。从事股票、电子现货、基金职业。在 2017 年 7 月 17 日,《福布斯富豪榜》发布,沃伦·巴菲特以净财物 734 亿美元排名第四。

作为”股神”,他的出资理念被许多人追捧。与其共进午餐的慈悲活动都能够拍卖到 345.67 万美元,从中咱们能够轻易地看出,他的出资界位置、影响力有多大。他的出资名言有许多:

危险,是来自你不知道你在做什么。

若你不计划持有某只股票达十年,则十分钟也不要持有。

出资的诀窍,不是评价某一职业对社会的影响有多大,或它的发展前景有多好,而是一间公司有多强的比赛优势。这优势能够保持多久,产品和服务的优越性耐久而深沉,才干给出资者带来优厚的报答。

我最喜欢的持股时刻是……永久!

要出资成功,就要拼命阅览。不光读有爱好购入的公司材料,也要阅览其他比赛者的材料。

从他的这些名言中,咱们不难发现,巴菲特做的是长期出资,他投一家公司,抱定的方针是持续持有,不由于价格原因而出售。他看准一家公司,会剖析这家公司的比赛优势,也会剖析这家公司的对手的比赛优势,然后做出出资决策。

他是怎样确认一家公司是否值得自己长期出资,是否具有比赛优势的呢?其间,最有用、最常用的手法之一便是剖析上市公司财政报表。网上有许多《跟巴菲特学看上市公司财政报表》诸如此类的文章,仁者见仁智者见智。

本文要点不在于怎样剖析财政报表,而是怎样取得财政报表,为后续的便利剖析做准备。

实战布景

Github代码获取:github/Jack-Cherish/Python-spider

Python版别: Python3.x

运转渠道: Windows

IDE: Sublime text3

每个上市公司的财政报表都是免费供给的,能够在他们的官网进行下载。可是这样一个一个找,太费事。有没有一个网站,集成好各个上市公司的财政信息呢?当然有,并且许多!各个金融门户网站都有!

今日,咱们看哪个金融门户网站?网易财经!

双手奉上它的地址:quotes.money.163/hkstock/

这个网站长这样:咱们能够经过股票查询,检查股票状况。比方我输入 00700,检查腾讯控股在美股的状况,如下图:能够看到,我截图的时刻,腾讯控股”绿了”,也便是跌了。点击财政数据,咱们就能够看到腾讯控股的财政报表,如图所示:这个财政数据栏目中,供给了《首要财政指标》、《赢利表》、《财物负债表》以及《现金流量表》。

从图中能够看到,该网站供给了财政数据在线阅读功用,可是没有供给财政报表下载功用,怎样将每年的财政数据获取,并存入数据库,便利咱们后续的剖析呢?没错,这便是本文的主题:财政报表爬取入库。

网站剖析

咱们以腾讯控股的财政数据为例进行剖析。

它的URL:quotes.money.163/hkstock/cwsj_00700.html

看一下这个 URL 地址有什么特色?腾讯控股的股票代码是 00700。对的,你没猜错,’quotes.money.163/hkstock/cwsj_’ + 股票代码 + ‘.html’,便是各个上市公司的财政数据页面。

考虑一个问题,下图的这些数据,咱们需求爬取吗?答曰:不需求!为什么?由于财政报表的格局是一致的。咱们需求的是这些报表里的数据,而不是表的栏目称号,这些栏目称号,咱们直接手动敲入到数据库中就能够了,直接作为数据库的列名。

那么,这些报表数据怎样获取呢?请看下图:在时刻挑选框这儿,咱们能够获取到一共有哪些时刻的财政报表。点击查询按钮,咱们就能够进行查询,对点击首要财政指标的查询按钮这个动作,运用 Fiddler 进行抓包剖析。

抓包截图如下:咱们能够看到,这个点击查询按钮,发送的恳求地址和回来数据。从上图能够看出回来的数据是以 JSON 格局存储的。那么咱们只需解分出这个 JSON 数据,就能够取得《首要财政指标》了。

同理,经过抓包可知,首要财政指标、赢利表、财物负债表、现金流量表恳求的 URL 别离如下:

quotes.money.163/hk/service/cwsj_service.php?symbol=00700&start=2006-06-30&end=2016-12-31&type=cwzb

quotes.money.163/hk/service/cwsj_service.php?symbol=00700&start=2006-06-30&end=2016-12-31&type=lrb

quotes.money.163/hk/hk/service/cwsj_service.php?symbol=00700&start=2006-12-31&end=2016-12-31&type=fzb

quotes.money.163/hk/service/cwsj_service.php?symbol=00700&start=2006-06-30&end=2016-12-31&type=llb

发现规则了吗?

symbol=股票代码

start=最早的财政报表时刻

end=最近的财政报表时刻

type=报表缩写(cwz代表首要财政指标,lrb代表赢利表,fzb代表负债表,llb代表现金流量表)

现已知道了各个恳求的地址,那么接下来便是解析 JSON 数据了。能够看到,数据存储是用的英文,咱们得与下图的中文进行对应,创立一个字典进行存储。别问我,我是怎样对应出来的。我只想说,我花费了半个多小时,对数据,对得我头晕眼花。

终究生成的对照表如下:编写代码

在持续看文本之前,期望你现已把握以下常识:

SQL 根底语法。

MySQL 数据库的装置与运用。

Python 操作 MySQL 数据库的办法。

SQLyog 的装置与运用。SQLyog 是一个快速而简练的图形化办理 MySQL 数据库的东西,它能够在任何地址有用地办理你的数据库。

Python3 爬虫根底。

01.在 SQLyog 中创立表咱们创立一个姓名为 financialdata 的数据库,并依据网站状况创立四个表,别离为:

cwzb(首要财政指标 )。

fzb(财物负债表 )。

llb(现金流量表 )。

lrb(赢利表)。

除了财政报表中的数据,咱们还需求额定添加股票名、股票代码、报表日期,用以区别不同股票,不同时刻的财政报表状况。

各个数据的数据类型,我是大略分配的,能够依据实际状况和自己的需求进行设置。当然,假如为了省劲,能够像我相同:除了报表时刻设置为 date 类型外,其他都设置为 char(30)类型即可。

好了,准备工作都好了,咱们开端编写代码吧,需求留意的一点是:在创立数据库衔接的时分,咱们需求指定 charset 参数,将其设置为 ’utf8’,由于数据库中存在中文,假如不设置,数据无法导入,当然,记住更改你的数据库名和暗码。

02.编写代码

编写代码如下:

#-*- coding:UTF-8 -*- import pyMySQL import requests import json import re from bs4 import BeautifulSoup if __name__ == \'__main__\': #翻开数据库衔接:host-衔接主机地址,port-端口号,user-用户名,passwd-用户暗码,db-数据库名,charset-编码 conn = pymysql.connect(host=\'127.0.0.1\', port=3306, user=\'root\', passwd=\'yourpasswd\',db=\'financialdata\',charset=\'utf8\') #运用cursor()办法获取操作游标 cursor = conn.cursor() #首要财政指标 cwzb_dict = {\'EPS\':\'根本每股收益\',\'EPS_DILUTED\':\'摊薄每股收益\',\'GROSS_MARGIN\':\'毛利率\', \'CAPITAL_ADEQUACY\':\'本钱充足率\',\'LOANS_DEPOSITS\':\'借款报答率\',\'ROTA\':\'总财物收益率\', \'ROEQUITY\':\'净财物收益率\',\'CURRENT_RATIO\':\'活动比率\',\'QUICK_RATIO\':\'速动比率\', \'ROLOANS\':\'存贷比\',\'INVENTORY_TURNOVER\':\'存货周转率\',\'GENERAL_ADMIN_RATIO\':\'办理费用比率\', \'TOTAL_ASSET2TURNOVER\':\'财物周转率\',\'FINCOSTS_GROSSPROFIT\':\'财政费用比率\',\'TURNOVER_CASH\':\'出售现金比率\',\'YEAREND_DATE\':\'报表日期\'} #赢利表 lrb_dict = {\'TURNOVER\':\'总营收\',\'OPER_PROFIT\':\'运营赢利\',\'PBT\':\'除税前赢利\', \'NET_PROF\':\'净赢利\',\'EPS\':\'每股根本盈余\',\'DPS\':\'每股派息\', \'INCOME_INTEREST\':\'利息收益\',\'INCOME_NETTRADING\':\'买卖收益\',\'INCOME_NETFEE\':\'费用收益\',\'YEAREND_DATE\':\'报表日期\'} #财物负债表 fzb_dict = { \'FIX_ASS\':\'固定财物\',\'CURR_ASS\':\'活动财物\',\'CURR_LIAB\':\'活动负债\', \'INVENTORY\':\'存款\',\'CASH\':\'现金及银行存结\',\'OTHER_ASS\':\'其他财物\', \'TOTAL_ASS\':\'总财物\',\'TOTAL_LIAB\':\'总负债\',\'EQUITY\':\'股东权益\', \'CASH_SHORTTERMFUND\':\'库存现金及短期资金\',\'DEPOSITS_FROM_CUSTOMER\':\'客户存款\', \'FINANCIALASSET_SALE\':\'可供出售之证券\',\'LOAN_TO_BANK\':\'银行同业存款及借款\', \'DERIVATIVES_LIABILITIES\':\'金融负债\',\'DERIVATIVES_ASSET\':\'金融财物\',\'YEAREND_DATE\':\'报表日期\'} #现金流表 llb_dict = { \'CF_NCF_OPERACT\':\'运营活动产生的现金流\',\'CF_INT_REC\':\'已收利息\',\'CF_INT_PAID\':\'已付利息\', \'CF_INT_REC\':\'已收股息\',\'CF_DIV_PAID\':\'已派股息\',\'CF_INV\':\'出资活动产生现金流\', \'CF_FIN_ACT\':\'融资活动产生现金流\',\'CF_BEG\':\'期初现金及现金等价物\',\'CF_CHANGE_CSH\':\'现金及现金等价物净添加额\', \'CF_END\':\'期末现金及现金等价物\',\'CF_EXCH\':\'汇率变动影响\',\'YEAREND_DATE\':\'报表日期\'} #总表 table_dict = {\'cwzb\':cwzb_dict,\'lrb\':lrb_dict,\'fzb\':fzb_dict,\'llb\':llb_dict} #恳求头 headers = {\'Accept\': \'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\', \'Accept-Encoding\': \'gzip, deflate\', \'Accept-Language\': \'zh-CN,zh;q=0.8\', \'User-Agent\': \'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\',} #上市股票地址 target_url = \'quotes.money.163/hkstock/cwsj_00700.html\' req = requests.get(url = target_url, headers = headers) req.encoding = \'utf-8\' html = req.text page_bf = BeautifulSoup(html, \'lxml\') #股票称号,股票代码 name = page_bf.find_all(\'span\', class_ = \'name\')[0].string code = page_bf.find_all(\'span\', class_ = \'code\')[0].string code = re.findall(\'\\d+\',code)[0] #打印股票信息 print(name + \':\' + code) print(\'\') #存储各个表名的列表 table_name_list = [] table_date_list = [] each_date_list = [] url_list = [] #表名和表时刻 table_name = page_bf.find_all(\'div\', class_ = \'titlebar3\') for each_table_name in table_name: #表名 table_name_list.append(each_table_name.span.string) #表时刻 for each_table_date in each_table_name.div.find_all(\'select\', id = repile(\'.+1$\')): url_list.append(re.findall(\'(\\w+)1\',each_table_date.get(\'id\'))[0]) for each_date in each_table_date.find_all(\'option\'): each_date_list.append(each_date.string) table_date_list.append(each_date_list) each_date_list = [] #刺进信息 for i in range(len(table_name_list)): print(\'表名:\',table_name_list[i]) print(\'\') #获取数据地址 url = \'quotes.money.163/hk/service/cwsj_service.php?symbol={}&start={}&end={}&type={}&unit=yuan\'.format(code,table_date_list[i][-1],table_date_list[i][0],url_list[i]) req_table = requests.get(url = url, headers = headers) value_dict = {} for each_data in req_table.json(): value_dict[\'股票名\'] = name value_dict[\'股票代码\'] = code for key, value in each_data.items(): if key in table_dict[url_list[i]]: value_dict[table_dict[url_list[i]][key]] = value # print(value_dict) sql1 = """ INSERT INTO %s (`股票名`,`股票代码`,`报表日期`) VALUES (\'%s\',\'%s\',\'%s\')""" % (url_list[i],value_dict[\'股票名\'],value_dict[\'股票代码\'],value_dict[\'报表日期\']) print(sql1) try: cursor.execute(sql1) # 履行sql句子 connmit() except: # 产生过错时回滚 conn.rollback() for key, value in value_dict.items(): if key not in [\'股票名\',\'股票代码\',\'报表日期\']: sql2 = """ UPDATE %s SET %s=\'%s\' WHERE `股票名`=\'%s\' AND `报表日期`=\'%s\'""" % (url_list[i],key,value,value_dict[\'股票名\'],value_dict[\'报表日期\']) print(sql2) try: cursor.execute(sql2) # 履行sql句子 connmit() except: # 产生过错时回滚 conn.rollback() value_dict = {} # 封闭数据库衔接 cursor.close() conn.close()

看下运转作用,咱们现已顺畅地将腾讯控股的财政报表带入数据库中了。上述代码比较粗糙,持续完善代码。对代码进行重构,创立一个获取数据报表的类。依据用户输入股票代码,下载相应股票的财政报表,并显现下载进展,完成作用如下所示:一向在看,何不自己写个代码试试?完成作用如上图所示!只要自己着手,才干体会到编程的高兴,对常识把握也就愈加厚实。

假如你觉得代码编写的差不多了,想对照代码看一看或许感觉自己无需着手,这种东西就能够轻松把握。

那么能够从我的 Github 获取上图完成作用的代码:github/Jack-Cherish/python-spider/blob/master/financical.py

总结

本文没有完成批量上市公司财政报表的获取与入库,由于办法有许多。

首要,咱们能够依据用户供给的股票代码进行批量下载。比方用户输入:00700,00701,00702。

然后程序依据输入的股票代码,进行相应的解析,创立出对应的URL链接,即可完成批量下载。

别的,也能够经过程序主动获取链接,比方网易财经供给了各个股票板块的涨幅排行榜、跌幅排行榜、成交额排行榜等,咱们经过获取这些股票的链接,也能够进行财政报表批量下载,办法很简单,因而不再负担。

其他:

在运用 MySQL 创立数据库衔接的时分,假如数据库(utf8 编码)中有中文,一定要记住设置 charset 参数为 utf8(对应数据库编码)。

学习 SQL 很有协助,数据库查询很便利,便利咱们进行数据剖析。

一切爬虫实战的代码,均能够在我的 Github 进行下载(Star 数量要破 100 了,给个助攻好不好?):github/Jack-Cherish/python-spider。

如有问题,请留言。如有过错,还望纠正,谢谢!崔家华

闻名博客博主

现就读于东北大学模式识别与智能体系专业。本科期间,曾担任学生会”科技立异中心主任”一职,担任安排各类科技比赛相关活动。与此同时,酷爱科技比赛,曾于 2015 年取得第十届全国大学生“飞思卡尔”杯智能车比赛全国一等奖。研究生期间,致力于机器学习,在闻名博客已取得了不错的重视度。

【51CTO原创稿件,协作站点转载请注明原文作者和出处为51CTO】

发布于 2023-12-11 05:12:51
收藏
分享
海报
100
目录

    推荐阅读