ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 9116|回复: 13

[分享] 关于动态抓取网络数据!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-27 11:43 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位表亲们好!今天我给大家分享一个动态网抓(感觉这个名字很酷!虽然可能算不上动态网抓)。希望能跟大家一起学习,有需要修改之处,还请大家指点指点。谢谢!
1.png
如上图:我需要到网易财经网上抓取某支股票的财务情况,需要将"资产负债表","利润表","现金流量表"抓取到excel中,而且当修改股票的交易代码时,数据能够动态更新(需要刷新)。结果如下图:在excel中更改股票代码后,再到资产负债表中刷新,可以看到数据已经改变了.(不太会用录屏软件,录的不好望见谅),下面我给大家讲解下怎么实现的吧:
结果.gif
第一步:首先,先去抓取一份资产负债表。复制 http://quotes.money.163.com/stock 进入网易财经网,拉到"行业版块"处,随便进入一个行业。再随便选择一种股票,选择财务分析项,点击下面的资产负债表。最后再将这个网址复制下来。为了不超过2M,GIF录制有点快,还请见谅。大家可以参照文字叙述的方法来操作。具体操作如下:
2.gif
第二步:打开excel,点击"数据"选项下的"自网站",然后将上一步复制的网址粘贴进去。最后点击"确定".
3.png
接着就进入了"导航器".选择带"文件夹图标"的那一项。再点击下面的编辑。就可以进入power query的查询编辑器了。
4.png
第三步:进入查询编辑器后。筛选第三列,将null筛选掉。然后保留最后一列,再将表名修改为”资产负债表"后,再复制一份表格。对于下图的操作,我做下解释。
1、为什么要将第三列的null筛选掉?首先,我需要抓取的数据是网站上面的资产负债表,并不需要其他数据。第三列是"类名",可以看到第二、三行中,含有Table(列表)字符的,而另两个并没有类名。所以将null筛选掉,保留"列表".
2、为什么需要复制一份表格?将null筛选出去后,当你将Data列展开后,会发现资产负债表的第一列和其他列的数据完全是错开的。因为第一列的数据和其他数据是分成两个表导入的。也就能解释为什么会有两行存在Table了。所以我复制一份"资产负债表"的副本,方便后面合并。
另:这一步操作,不知道有没有大神可以在不复制副本的情况,将第一列和其他数据合并在一起?希望能得到指点!.
5.gif
第四步:将两个表格的列表都扩展。第一个表:将第一列的null筛选掉,并删除其他列。所保留的数据就是"资产负债表"的第一列了。第二个表:只选择第一列的null,并删除第一列,保留其他列。这个表所保存的数据为"资产负债表"中,除去第一列的其他数据。
6.gif
接下来可以利用索引列,将第一列(资产负债表) 和 其他数据 (资产负债表2) 合并起来。但这两个表格并不能直接用索引来合并,需要做一些处理。如下图:从这张图可以发现,在"资产"和"流动资产"那两行是没有数据,而且后面的数据中还有这样的情况。而在抓取的表格中,这些行都是存在的,而且展示资产负债表,这些行也是必不可少的。关键是”其他数据"(资产负债表2)中是跳过了这些行。所以需要资产负债表(第一列)中的索引忽略这些没有数据的行,并且还要连续。
5.png
第五步:在资产负债表中发现,凡是有数字的行,其对应的第一列中都会有标明单位(万元)。利用这一点,可以判断出哪些行没有数字 了。.首先在资产负债表2(其他数据)中增加索引列。然后在资产负债表(第一列)中也增加一列索引列。然后增加一列条件列,判断如果第一列包含 "(",则返回对应的索引,否则返回9E307.然后将条件列进行升序排列。.这样没有数字的行就会排到最后几行了。再增加一列索引列。这时所增加的索引列,是忽略了没有数字的行,所得到的索引正好与负债表2(其他数据)中的索引对应了。
注:这里的9E307是一个较大的数字,一般没有比这个数字更大的了。
7.gif

第六步:根据索引进行合并查询。注意资产负债表(第一列)中的索引,需要根据最后一次所产生的索引来进行匹配。联接种类选择第三个:完全外部(两者中的所有行),点击确定,将匹配的列筛选掉"索引"后扩展开。接着删除 条件列和最后一次增加的索引列,然后将第一次增加的索引列进行升序排序。现在资产负债表的基本已经完成了。接下来需要做一个查询表,通过查询表中的股票代码,来抓取资产负债表。
8.gif

第七步:创建查询表。关闭“查询编辑器",在excel中随便一个位置输入股票代码,然后通过从表格,将这个股票代码存入查询编辑器中。最后将表名修改为"查询表",还有将股票代码的格式设置为文本。.
10.gif

第八步:通过M函数创建动态查询网址。如下图:将"资产负债表"和“资产负债表2"中的网址都需要修改。点击表格最开始导入的"源",将里面的6位数股票代码修改为:"&Text.Combine(查询表[列1])&" 。也可以直接在"高级编辑器"中修改。一般修改后会出现错误。出现错误后,可以点击最后一步操作,再点击 继续。将选项打勾确定就行了。如果最后一步操作没有"继续 ",可以先退出"查询编辑器“,退出后就会弹出对话框。
11.gif
关于上一步所出现的错误,属于excel中的隐私级别的防护。防止因修改网址出现 的隐私问题。官方解释如下 :
隐私级别说明.png 隐私级别.png
第九步:将表格格式调整后,可以直接退出"查询编辑器".如果没有设置,默认会自动将表格上载至excel中。接下来,因为"资产负债表2"只是一份辅助查询表,并不需要展示。所以可以在”查询&连接"中右键点击表格。选择"加载到 “,在对话框中选择”仅创建连接",点击确定就可以了。.而"资产负债表"是需要展示在excel中的。但目前所展示 的数据,行顺序是与"资产负债表"中的行顺序不一致的。所以也需要在”查询&连接"中右键点击表格。选择"加载到 “,这里需要选择 "表" .同时,需要将 “将数据添加到数据模型" 这个选项的勾去掉。然后点击确定。这样"资产负债表"中的行顺序就是正常的了。然后只需要在"查询表"中修改股票代码 并在"资产负债表"中刷新,就可以抓取 不同股票的对应表格数据了。
12.gif
感谢表亲们的阅读!以上就是 抓取 "资产负债表" 的步骤了。不知道各位表亲有没有自己试试?大家也可以按照上面的步骤去把 "利润表" 和 "现金流量表" 也抓取下来。注意:利润表的格式和资产负债表的格式有些不一样,不过抓取利润表更容易 些。大家可以试试! 如果有不懂或出现问题的地方,可以在下面留言,大家一起讨论,一起解决,一起学习!同时,也希望大家能够指出不足,共同进步!

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-3-27 22:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-4-9 18:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了很有帮助

TA的精华主题

TA的得分主题

发表于 2018-8-10 07:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-10 08:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-10 09:48 | 显示全部楼层
学习了               

TA的精华主题

TA的得分主题

发表于 2018-8-10 15:28 | 显示全部楼层
新浪还是比较仁义的,几乎所有的东西都可以抓。。。

TA的精华主题

TA的得分主题

发表于 2018-8-11 13:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-9-16 17:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-9-17 15:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:31 , Processed in 0.053874 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表