还是跟着@Jack-Cui老哥教程跟着编的爬虫,稍微改动了下,主要是mysql的插入方式,我使用了lazyspider的方法,不需要手动撸sql语句,还用的progressbar模块,可以显示进度条(不过不能再cmd用!!)

原网址:https://blog.csdn.net/c406495762/article/details/77801899

要点:1.eval()可以把字串符变为 变量

2.利用循环生成创建表格的sql语句

3.lazystore的使用

4.progressbar模块生成进度条

代码如下

#-*- coding:UTF-8 -*-
import sys
import requests
from bs4 import BeautifulSoup
import re
from lazyspider.lazystore import LazyMysql
import time
from progressbar import *class FinancialData():def __init__(self):# 服务器域名self.server = 'http://quotes.money.163.com/'self.cwnb = 'http://quotes.money.163.com/hkstock/cwsj_'# 主要财务指标self.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': '报表日期'}# 利润表self.lrb_dict = {'TURNOVER': '总营收', 'OPER_PROFIT': '经营利润', 'PBT': '除税前利润','NET_PROF': '净利润', 'EPS': '每股基本盈利', 'DPS': '每股派息','INCOME_INTEREST': '利息收益', 'INCOME_NETTRADING': '交易收益', 'INCOME_NETFEE': '费用收益','YEAREND_DATE': '报表日期'}# 资产负债表self.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': '报表日期'}# 现金流表self.llb_dict = {'CF_NCF_OPERACT': '经营活动产生的现金流', 'CF_DIV_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': '报表日期'}# 请求头self.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'}#总表self.table_name={'cwzb': '主要财务指标', 'lrb': '利润表', 'fzb': '资产负债表', 'llb': '现金流量表'}def get_name(self,code):'''输入股票编号,返回名字,报表时间'''code=str(code)target_url = self.cwnb+code+'.html'req = requests.get(url=target_url, headers=self.headers)req.encoding = 'utf-8'html = req.textpage_bf = BeautifulSoup(html, 'lxml')# 股票名称name = page_bf.find_all('span', class_='name')[0].string#报表初始时间———结束时间time=page_bf.find_all('select',id='cwzb1')[0].select('option')endtime=time[0].textstarttime=time[-1].textreturn name,starttime,endtimedef get_informations(self,code):'''返回名字,汇总字典{报表:对应list,,,}'''# 整个汇总字典结构如下{'cwzb':[{'TURNOVER':33,'股票名':tx,···}、{}],'lrb':[{},{}],····}name, starttime, endtime=self.get_name(code)table_dict={}  #总字典for table in self.table_name.keys():#每个表的数据轮流单独处理url=self.server+'hk/service/cwsj_service.php?symbol={}&start={}&end={}&type={}&unit=yuan'\.format(code,starttime,endtime,table)#打开每个数据类型对应的网页,把该表格的数据汇总,每个年度的字典组成的listtable_text=requests.get(url=url,headers=self.headers).json()#得到对应的中英文转换表,self.cwzb_dictdicts=eval('self.'+table+'_dict')list=[]for one in table_text:  #英文名的表头全部换为中文,再把每个年度的字典放进list里,然后再把这个list放进总字典c={dicts[zhong]:one[ying] for zhong in dicts.keys() for ying in one.keys() if ying==zhong}c['股票名']=namec['股票代码']=codelist.append(c)  #c就是每一年度的具体报表,list就是该报表的每个年度的汇总,table_dict就是4个报表的汇总table_dict[table]=list#每个报表:listreturn name,table_dictdef insert_tables(self,table_dict):'''先创建table(现金流表、、),然后把每一年的数据插入'''for table in table_dict.keys():#循环总字典table_name=self.table_name[table] #总字典key是英文(cwzb、、),先转换为中文#循环数据(dict)把每一列的列名添加到创建table的sql语句中sql="CREATE TABLE IF NOT EXISTS %s (报表日期 char(30)"% table_namefor key in table_dict[table][0].keys():#总字典→报表→第一个字典的keysif key!='报表日期':sql+=','+key+' char(30)'sql=sql+")ENGINE=InnoDB DEFAULT CHARSET='utf8'"#运用lazymysql,登录mysql然后执行TEST_DB = {'host': 'localhost','user': 用户名,'password': 密码,'db': 'test'}store = LazyMysql(TEST_DB)store.query(sql)          #直接操作sql语句,创建表格tablebar = ProgressBar(widgets=[  #使用progress模块,显示进度条'    [正在下载  ',Percentage(),Bar() ,   ']    ',table_name,])#把list的每一年的数据(dict)插入到对应的表格里for item in bar(table_dict[table]):#循环报表的listtime.sleep(0.1)store.save_one_data(item,table_name)    #插入到mysql----表名,字典if __name__ == '__main__':print('*' * 100)print('\t\t\t\t\t财务数据下载助手\n')print('*' * 100)fd = FinancialData()# 上市股票地址code = input('请输入股票代码:')name,table_dict=fd.get_informations(code)print('\n  %s:(%s)财务数据下载中!\n' % (name, code))fd.insert_tables(table_dict)print('\n  %s:(%s)财务数据下载完成!' % (name, code))
 

其中创建table的语句我用循环自动生成了,不需要自己手撸这么痛苦!!!

CREATE TABLE IF NOT EXISTS 利润表 (报表日期 char(30),每股派息 char(30),总营收 char(30),股票代码 char(30),经营利润 char(30),除税前利润 char(30),交易收益 char(30),净利润 char(30),利息收益 char(30),股票名 char(30),每股基本盈利 char(30),费用收益 char(30))ENGINE=InnoDB DEFAULT CHARSET='utf8'

效果图:

插入图:

python把网易财经的股票信息 财务报表入库(MySQL)相关推荐

  1. [Python]通过网易财经接口获取股票和指数的历史数据

    因为最近需要用到股市的各种指数数据,刚开始想的是从同花顺等交易软件直接导出,结果发现要用滚轮滚到最开始的日期,这过于繁琐了,我对于这种重复性的劳动一向不耐烦,而且这种方法在以后每日更新的时候也很不方便 ...

  2. 使用python在网易爬取股票信息,制作股票分析系统(简易版)

    这是使用python3.5+BeautifulSoup来爬取网易的股票信息, 使用这些数据来画出蜡烛图和折线图.效果如下图所示: 这个实现出来还是很简单的.这是大二做的,做的不怎么好,只是练练手. 代 ...

  3. Python爬虫实战,requests模块,爬虫采集网易财经股票交易数据

    前言 本文给大家分享的是如何通过Python爬虫采集网易财经易数据 开发工具 Python版本: 3.8 相关模块: requests模块 parsel模块 环境搭建 安装Python并添加到环境变量 ...

  4. python爬网站数据实例网易财经股票数据历史资金流向-批量采集网易财经所有A股股票数据并导出excel表格...

    2.[代码][Python]代码 # -*- coding: utf-8-*- # @Date : 2014-05-20 # @Author : Lifemaxer # @Website : http ...

  5. python获取财务数据曝光_Python-股票-从网易财经获取主要财务指标数据

    以下代码从网易财经的个股页面获取主要财务指标,获取的数据输出到Excel电子表格中. import pandas as pd from pandas.core.frame import DataFra ...

  6. python爬网站数据实例网易财经股票数据历史资金流向-Python-股票-从网易财经获取主要财务指标数据...

    以下代码从网易财经的个股页面获取主要财务指标,获取的数据输出到Excel电子表格中. import pandas as pd from pandas.core.frame import DataFra ...

  7. python财务报表分析-用Python爬取东方财富网上市公司财务报表

    ♚ 作者:苏克,零基础.转行python爬虫与数据分析 博客:https://www.makcyun.top 摘要: 现在很多网页都采取JavaScript进行动态渲染,其中包括Ajax技术.有的网页 ...

  8. Python采集wangyi财经数据信息,做个可视化小案例

    前言 2022年全球股市普跌,你亏了多少钱? 亏多少我也不知道,我只是想着来采集数据,做个可视化小案例来玩玩 话不多说,咱就直接开始吧 开发环境 解释器版本: python 3.8 代码编辑器: py ...

  9. 【Python金融量化 1- 100 】了解Python及常用财经数据接口包

    了解Python及常用财经数据接口包 背景介绍: Python是一种计算机程序设计语言,它诞生于20世纪90年代初,正在逐渐被广泛运用中. Python的创始人是Guido van Rossum.相传 ...

最新文章

  1. C++基类和派生类的构造函数(一)
  2. 产品所有者也应该是Scrum教练吗?
  3. 代理proxy网络代理自动发现wpad代理自动配置pac三个概念解析
  4. vant部署_详解VUE项目中安装和使用vant组件
  5. HTML 内容不能被选择,不能被复制
  6. 44 万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
  7. Kafka_Zookeeper_环境搭建使用
  8. LeetCode 985 Sum of Even Numbers After Queries 解题报告
  9. am3352 软时钟老是漂移 rx-8025时钟 rx-8025SA时钟
  10. UWP 中的各种文件路径(用户、缓存、漫游、安装……)
  11. 细粒度粗粒度_粗粒度基准
  12. 服务器08系统操作日志在哪看,怎么查看服务器操作系统日志
  13. DQN:Playing Atari with Deep Reinfocement Learning
  14. 诚之和:字节再迎裁员潮温州百人“大撤退”、ohayoo应届生“团灭”
  15. 5G的10大典型应用场景,及详细应用功能
  16. 模块间通信 --linux
  17. echarts map (echarts地图)使用总结
  18. cms系统有哪些_常见建站cms系统推荐
  19. 计算机网络基础知识总结之网络协议
  20. php用户抽奖次数怎么做,获取用户剩余抽奖次数

热门文章

  1. 基于扩展卡尔曼滤波(EKF)的机器人状态估计
  2. python制作冰花_自制冰花小学作文
  3. MATLAB实现频谱细化分析
  4. ipad在线看html5,完美支持Html5 iPad优酷播放体验
  5. 伪ios新浪微博客户端(自家用)
  6. mysql数据库实验报告一
  7. 假设检验/T检验/F检验/Z检验/卡方检验
  8. win7计算机磁盘清理,Win7系统磁盘清理使用方法图文教程
  9. MySQL约束条件及外键的关系
  10. 量化私募行业2021年度关键词出炉