excel自动抓取网页数据(使用Excel自带的PowerQuery获取网页表格数据(一))

优采云 发布时间: 2022-01-05 13:13

  excel自动抓取网页数据(使用Excel自带的PowerQuery获取网页表格数据(一))

  VBA网络捕捉的最初想法诞生是因为我在炒股时想更快地获取信息,但又不想购买昂贵的经纪软件。后来调查发现Python其实是最著名的爬虫创建工具,只是需要安装环境,最后只能在自己的电脑上使用。通用性不是很强,所以我把目光投向了使用Excel或VBA。抓牢。

  (一)使用 Excel 自带的 Power Query 获取网页表单

  如果一种方法可以解决*敏*感*词*融网数据引擎(/cfidata.aspx)。不得不说这个网站对于使用Excel自动web数据源获取真的很友好,因为都是可识别的表格数据。更新 Excel 后看起来像这样。之后,您可以快速清洁,

  

  不过后来我其实发现了这个方法的局限性,就是对数据源的要求太高了。网站的很多表格数据无法通过Excel导入网站数据源来识别,我想这个网站不收录股票或期货的历史数据。WPS 不支持 Power Query 方法。就这样,我终于放弃了这个想法,开始探索真正的VBA网页抓取实现方法。

  (二)Excel VBA实现期货行情获取及历史数据下载

  第一步是选择数据源。如果使用Python web爬取,数据源其实很容易找到。许多在线接口都是为 Python 开放的。开发者甚至不需要寻找源网页,使用各种接口提供的*敏*感*词*融期货交易所)官网获取数据即可。这些网站提供下载链接和一键下载功能。然而,在后续对html请求和响应的分析中,我作为一个强迫症患者最不能接受的情况发生了。四个交易所中,三个可以被抓到,一个不能被反爬虫抓到。. . 这种情况就得找其他接口了,不行,我不能接受!后来发现新浪界面真是个宝,四个交易所都收录在内。如果好,我决定分析这个网页,然后抓取它。成功!附上新浪界面链接(需要自己分析这个网页,

  实时报价:.cn/quotes_service/view/qihuohangqing.html#titlePos_1

  历史数据:.cn/q/view/vFutures_History.php?jys=czce&pz=AP&hy=AP0&breed=AP0&type=inner&start=2021-11-23&end=2021-12-23

  第二步是实现代码。VBA网页抓拍入门可以参考B站UP主发布的免费教程(链接/video/BV1uJ411t7hY/)。这次抓期货的时候,先分析了新浪财经的网页,发现这个界面并不复杂,可以直接用Winhttp来请求,然后用正则表达式对返回的数据进行处理。核心代码如下:

  发送请求部分

  

  正则表达式匹配和写入数组部分

  

  需要注意的是,产品报价更新时,网抢返回的产品名称是unicode编码,所以需要转换成汉字。这部分写了一个自定义函数。代码如下:

  

  网络爬虫部分还有一个需要注意的就是对返回的json格式数据的处理。事实上,VBA可以参考脚本组件来实现对json数据的快速便捷的分析,参考此类组件解析json,会自动将unicode转为汉字。但是在这种方法测试中,wps运行正常,但是有的excel会报错,说是缺少ActiveX控件的429错误,这个不好解决。一般这种错误不是excel版本引起的。很有可能是wps和office同时安装导致部分系统组件注册失败。这种错误不能通过修改代码来解决(除非改变代码逻辑,不调用其他组件)。是系统问题,比如损坏的注册表项、删除的操作系统文件、不完整的excel安装、损坏的系统文件等等。所以最后为了增加兼容性,避免此类错误,重新修改了代码。没有使用脚本组件来解析 json,而是使用了正则表达式。

  抓网后,简单的写一些数据处理函数公式,设计两种存储方式(存储到当前工作簿,或者新建一个工作簿),软件功能就完成了。在计算日期时,excel内置的工作日函数非常好用。

  第三步是与表单交互。最后,我设计了一个用于数据输入的交互式表单。代码主要使用inputbox的方式。核心代码和接口如下:

  

  

  目前我的软件已经在我的网盘上共享了,后续更新(如果网络抓包不行)也会在同一个网盘链接上共享。不过正在努力开发一款软件,还是希望得到一些支持,大家可以尝试搜索“ExcelVBA期货市场历史数据下载器和所有交易所产品自动计算当前差价”。

  使用类似方法实现股票信息获取教程,可以参考我的另一篇文章文章/p/442447962

  或搜索“股票信息下载软件,历史股价、股息和财务报表自动更新Excel网络爬虫VBA”。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线