vba 网页数据抓取(如何轻松用Excel获取网页数据的一些初步的爬虫方法)
优采云 发布时间: 2022-04-14 10:24vba 网页数据抓取(如何轻松用Excel获取网页数据的一些初步的爬虫方法)
通常我们使用Excel,经常处理本地数据。你知道 Excel 的排序、过滤、条件格式、数据透视表、图表等……但你可能不知道如何在 Excel 中获取网页上的数据!
网络爬虫?!你可能认为你必须编写代码来实现这一点。其实除了代码,Excel还有一些现成的功能,让你不用代码也能获取网页的数据!
下面的方法中,前三种不用写代码,最后一种需要代码,不过我已经写好了,可以用了,这样你也可以学会轻松使用Excel获取一些web的初步爬虫页面数据方法!
功能方法
从 Excel 2013 版本开始,引入了一些 Web 功能。下面两个函数可以一起使用,帮助我们从网页获取数据到Excel。
FILTERXML(xml, xpath),从 XML 数据中返回指定的数据。网页上的许多数据都以 XML 的形式存在。该函数用于提取 XML 中的指定信息。
WEBSERVICE(url),返回网页中的数据,可以理解为这个函数可以获取一堆XML字符串数据。
例如下面的公式使用有道翻译的网站得到翻译结果:
=FILTERXML(WEBSERVICE(";i="&B2&"&doctype=xml&version"),"//translation")
如果你把上面的公式复制到Excel,你只需要在B2单元格输入你要翻译的内容,公式就会把翻译结果返回给你!
是不是觉得超级方便!对于外部数据的轻量级连接,这个函数方式还是比较方便的。
除了翻译,使用此功能还可以协助您进行股票交易!我在工作,不方便使用手机或阅读财经网页,但我想关注实时股价。我怎样才能打破它?
把下面的公式复制到B1单元格,然后在A1单元格输入你关心的股票代码,B1就可以显示实时股价了,想刷新的时候按F9就行了~
=VALUE(TRIM(MID(SUBSTITUTE(WEBSERVICE("/stockdata/stock_quote.aspx?stocklist="&A1&"&time=" & TEXT(NOW(), "hhmmss"))),",",REPT(" ",9 9)),2*99,111)))
当你在专心看Excel工作(chao)工作(gu)时,即使老板突然路过,你也能从容应对!不要让你的老板知道这个技能!
但是你也需要注意使用这个公式。首先,您必须确保您的计算机可以正常连接到 Internet。另外,如果你翻译调整了网页代码,或者网站的入口发生了变化,上面的公式也会失效,你需要重新研究一下逻辑。写公式~
旧版网页查询功能
在Excel 2016之前,一直有获取网页数据的功能,在Excel 2016推出PQ后隐藏了,但是还是可以手动调出来的!
手动方法可以从“选项”中的“数据”设置其显示,也可以直接按快捷键Alt+D+D+W(注:不需要同时按,直接按依次进行,就可以了!),会弹出如下界面:
然后我们只需要输入网页地址,如图所示地址为#06f01。
这个功能可以帮助我们识别网页中的表格,然后我们只需要选中表格(点击*敏*感*词*箭头选择),点击右下角的导入,就可以将数据导入Excel了!
而且还可以刷新这张表,同时支持手动刷新和自动刷新,非常方便~
这种方法的问题在于,并不是所有的网页都能获取数据,因为你可能无法获取到真实的网址,所以你应该尽量找到最深入的地址。你有办法爬取,别人有办法逆向,所以要不断获取网页的数据,需要密切关注网页是否发生变化~
Power Query 获取网页数据
从Excel 2016开始,PQ已经集成在Excel中,并且计划替换旧版本的数据查询和获取功能,所以使用PQ也可以帮助我们从网页中获取数据!
因为*敏*感*词*太大上传不了,我就用截图来说明步骤:
2、在出现的导航器中,点击表格开头的图标,右侧会有这些表格的预览,选择你要导入的表格,点击右下角的“加载”
3、然后就可以获取表格数据到Excel了,而且还支持手动刷新和自动刷新!
VBA代码方法
其实以上方法都不是真正的“爬虫”技能。要更灵活地获取数据,需要使用VBA代码。
使用VBA获取网页数据当然可以结合以上三种方式,因为写代码就是可以判断和循环,就像上面的股票收盘价信息一样,可以循环获取多只股票的数据现在,会更方便!
比如用VBA调用第二种方法,结合Excel的基本功能对数据进行组织提取,就可以得到历史天气数据!下面使用VBA方式获取天气数据~
对于零售业来说,天气确实是一个非常重要的因素,它会影响客流和季节性产品的销售。因此,有必要对历史天气数据进行分析!
如何批量获取天气数据?以下是获取北京2019年11月历史天气数据的结果:
这需要使用 VBA 代码。上述方法不适合大量获取数据。不会码字?没关系,我已经写好解释了,你复制后稍加修改即可使用。(代码在文末)
如果还想获取多个城市、多个年份、多个月份的数据,那么就需要考虑更多的情况。您可以根据文末提供的代码修改实现。