首页 » Web前端 » php获取摘要技巧_Python抓取上市公司财务数据六财务摘要数据抓取

php获取摘要技巧_Python抓取上市公司财务数据六财务摘要数据抓取

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

先回顾一下本主题“Python抓取上市公司财务数据”的内容体系,分成9节来为‬大家讲解,从0到1来详细拆解程序开拓流程和编码实现,这套体系内容适宜给Python零根本的小白学者学习,同时也对熟习python但对数据采集不闇练的量化专家供应一套Python抓取的最佳实践。
其包含的紧张章节如下:

1. Centos7搭建代码库和Python运行环境

php获取摘要技巧_Python抓取上市公司财务数据六财务摘要数据抓取

2. Win10搭建Python开拓环境

php获取摘要技巧_Python抓取上市公司财务数据六财务摘要数据抓取
(图片来自网络侵删)

3. Python爬虫运用运行(Docker)镜像准备

4. 编码实现上市公司列表抓取

5. 编码实现上市公司简介和行业板块抓取

6. 编码实现上市公司企业财务择要抓取

7. 编码实现上市公司历年财务数据抓取

8. 编码实现上市公司财务数据抓取结果入库(Mysql)

9. Python代码提交及支配运行

本文讲解的是主题里的第6章节,内容紧张分为以下两点:

1)财务择要页面的数据构造剖析

2)编写财务择要数据抓取和解析程序

本文涉及到的干系根本知识紧张有XPath的通配符利用、多层级字典的利用。
个中,XPath 表达式的通配符可以用来选取未知的节点元素,基本语法如下:

1) 通配符代表匹配任意元素节点;

2) 通配符@代表匹配任意属性节点;

3) 通配符node()代表匹配任意类型的节点。

其余,字典的赋值前一样平常会先判断其key是否存在,如果存在则读取后更新。
我们可以利用字典的has_key(key)方法来判断key是否存在。
在字典value还是字典类型的多层级字典中,我们也可以利用get方法来获取key的值,如果不存在则返回预设的默认值。
更新返回的默认值后,再重新赋值给原有的key。
如字典a的键key初始化办法:

a[key] = a.get(key, {})

一、财务择要页面的数据构造剖析

第一步:打开财务择要页面

打开财务择要页面,以新华医疗(600587)为例,如下:

第二步:打开页面的浏览器检讨工具

我们通过右键-点击“检讨”(或快捷键F12),利用元素选择器选择财务择要表格的首行的第一项,如下图:

第三步:复制表格首行的XPath信息

我们选择首行所在的<tr>标签,点击右键-复制-复制XPath,如下图:

得到的XPath信息为://[@id="FundHoldSharesTable"]/tbody/tr[1]

二、编写财务择要数据抓取和解析程序

第一步:打开scrapy_detail.py模块文件

打开项目文件夹scrapy-finance,并选中scrapy_detail.py右键-Edit with IDLE-Edit with IDLE 3.10(64-bit),如下图:

打开后,如下图:

第二步:编写代码抓取结果的XPath提取

编写scrapy_finance_summary函数抓取页面数据代码,包含参数code股票代码,detail_dir详情存储目录,overwrite是否重写结果文件(若需将抓取结果覆盖)。
并先根据抓取和XPath提取页面元素的逻辑编写提取财务择要表格的tr元素选择器代码,如下:

def scrapy_finance_summary(self, code, detail_dir, overwrite): res_file = "%s/summary_%s.data"%(detail_dir, code) if not overwrite and os.path.isfile(res_file): print ("skip scrapy, result exist in:" + res_file) return False detail_url = "http://vip.stock.finance.sina.com.cn/corp/go.php/vFD_FinanceSummary/stockid/%s/displaytype/4.phtml" resp = request.urlopen(detail_url%(code), timeout=30) print("request url:" + resp.geturl()) rt_code = resp.getcode() if rt_code==200: content = resp.read() response = HtmlResponse(url=detail_url, body=content) sel = Selector(response=response) tr_list_sel = sel.xpath('//[@id="FundHoldSharesTable"]/tr') for tr_sel in tr_list_sel: td_sel = tr_sel.xpath('td') print (td_sel) else: print("error return code: %d" % rt_code) return True

将方法scrapy_finance_summary放在ScrapyDetail类中,编写效果如下图:

第三步:运行测试XPath解析结果

为了测试scrapy_finance_summary函数,我们在run方法中增加调用,参数code、detail_dir、overwrite均和前面简介页抓取的调用同等,调用代码如下图:

保存后运行该模块,结果如下:

根据运行结果,我们能看出我们须要提取的数据,每行均为两个元素,第一行加粗利用的<strong>标签,并且部分字段还带有a标签超链接。

第四步:编写将择要数据解析到字典的处理逻辑

我们在循环处理之外定义date_dict字典,并在循环处理中将字段提取保存到字典中。
并且将日期作为字典的第一级,后续的键值对作为第二、三级。
其余,上一个日期值用变量last_title_val存储起来以用于后面键值对的字典查询存储。
代码如下:

if len(td_sel) != 2: continue title_key = td_sel[0].xpath('strong/text()').extract_first() title_val = td_sel[1].xpath('strong/text()').extract_first() if title_key and title_val: last_title_val = title_val continue key = td_sel[0].xpath('text()').extract_first() val = td_sel[1].xpath('text()').extract_first()val = val if val else td_sel[1].xpath('/text()').extract_first() info_dict = date_dict.get(last_title_val, {}) date_dict[last_title_val] = info_dict info_dict[key] = val.strip() print (date_dict)

上述处理代码中,须要把稳几点:

1. 对付不是两列的行数据直接跳过忽略;

2. 日期行我们利用strong/text()子路径来匹配提取,如果提取日期成功,则存储当前日期值,直接解析下一行;

3. 非日期的数据行,我们直策应用text()子路径提取文本,而部分包含a标签的文本,前述步骤提取结果为None,我们通过if else表达式对未匹配成功的元素增加通配符路径/text()来再次提取其文本值。

4. 字典取值时,我们利用字典的get(key, default_value)方法,即若不存在该key则返回默认值。
因此当字典在不存在last_title_val时,会将该键赋值为{},即空字典。

增加的数据解析代码添加后,如下图:

第五步:运行测试数据解析逻辑

保存并运行模块代码,结果如下图:

代码成功解析出了上市公司的财务择要数据。

第六步:编写将解析结果存储到文件

在scrapy_detail函数中,将解析结束后的打印字典换成写文件,如下图:

保存并运行后,效果如下图:

第七步:查看财务择要抓取结果

打开detail_data文件夹,查当作果文件,如下图:

运行结果成功保存到了summary_600587.data数据文件中。

三、结语

本文先容了新浪财经的上市公司财务择要页的抓取、解析及持久化。
先通过元素选择器找到财务择要数据表格的XPath信息,再通过编写python程序来实现数据的抓取和表格数据解析成以前面日期值为键,字典值为后续的键值对数据,得到层级为三层的结果字典数据,末了将字典数据存储到结果文件中。

下一节将先容“上市公司的历年财务数据抓取”,将会进一步增加python抓取程序的实现难度,实现多个类似数据构造的网页数据的通用抓取。
本主题以逐步深入的办法让初学者和普通开拓者都能通过对主题的学习来节制python抓取上市公司财务数据的编码及实操。

看到结尾的朋友请点赞支持下吧,对本主题感兴趣的可以关注后续动态~

标签:

相关文章