怎么获取codeforces的数据_用Excel爬数据炒股票,老板还以为你在认真工作

平时我们使用Excel,经常是处理本地的数据,你懂得Excel的排序,筛选,条件格式,透视表,图表等…… 但你可能不懂Excel怎么获取网页上的数据!

网络爬虫?!你可能以为一定要写代码才能实现,其实除了代码外,Excel还配有一些现成的功能,方便你不用代码也能获取到网页的数据!

以下的方法中,前面三种都不用写代码,最后一种需要用到代码,但我也已经写好了,拿来就能用,让你也学会轻松用Excel获取网页数据的一些初步的爬虫方法!

函数法

自Excel2013版本开始,就推出了一些Web函数,以下的2个函数配合使用,就可以帮助我们获取网页的数据到Excel。

FILTERXML(xml, xpath) , 从XML数据中返回指定的数据,网页上的数据很多都是以XML的形式存在,这个函数就是用于提取XML中的指定信息。

WEBSERVICE(url) , 返回网页中的数据,你可以理解为该函数可获得一堆的XML字符串数据。

例如下面的这个公式,就是使用有道翻译的网站,可以获取翻译结果:

=FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&B2&"&doctype=xml&version"),"//translation")

4d5e20b130da4177681bb2a3eca04e1f.png

如果你复制以上公式到Excel后,你只需要在B2单元格输入你要翻译的内容,公式就会返回翻译的结果给你!

68e22f0739e50fe68915a4dfd76cee30.gif

是不是觉得超级方便!对于轻量级连接外部数据,这个函数方法还是挺方便的。

除了可以翻译之外,用这个函数还可以辅助你炒股!正在上班,不方便使用手机或看财经网页,但又想关注股票的实时价格,怎么破?

复制以下公式到B1单元格,然后在A1单元格中输入你关注的股票代码,在B1就能显示实时的股价了,想刷新时按一下F9就行了~

=VALUE(TRIM(MID(SUBSTITUTE(WEBSERVICE("http://quote.stock.hexun.com/stockdata/stock_quote.aspx?stocklist="&A1&"&time=" & TEXT(NOW(), "hhmmss")),",",REPT(" ",99)),2*99,111)))

当你在专注地看着Excel工(chao)作(gu)的时候,即例老板忽然在身边经过,你也能淡定地应对了!这个技能,千万不要让你的老板知道了!

但使用这个公式也需要注意,首先必须保证你的电脑能正常联网,另外如果有道翻译调整了网页代码,或者网址的入口改变了,那么上面的这个公式也会失效,需要重新去研究逻辑再写公式~

旧版网页查询功能

在Excel2016以前,一直有一个获取网页数据的功能,在Excel2016推出PQ后就隐藏起来了,但是仍然可以通过手工调出来!

手工调出来的方法可以从「选项」中的「数据」里去设置它的显示,也可以直接通过按快捷键Alt+D+D+W(注意:不需要同时按,只需按顺序按下去即可!),然后就会弹出以下的界面:

29950072662e1541d4342f06829d9e79.png

然后我们只需要输入网页地址,图中演示的是 http://quotes.money.163.com/trade/lsjysj_600519.html#06f01 这个地址。

3b3e7e9378d0bb2d87830476e3e21b5e.png

这个功能就能够帮我们识别网页中的表格,然后我们只需要选中表格(点黄色箭头去选),点右下角的导入,然后就可以把数据导入到Excel中!

而且你还可以刷新这个表格,同时支持手动刷新和自动刷新,非常的方便~

6feae3bb4ec3ed787986e83c490fd28e.png

这个方法要注意的问题是,并不是所有的网页都可以获取到数据,因为你不一定能拿到真实的网页地址,所以你要尽量找到最深入的那个地址。你有办法爬,别人也有办法反爬,所以持续地获取网页的数据,就需要密切关注网页是否有变化~

Power Query获取网页数据

自从Excel 2016开始,PQ就集成在Excel中,并且计划用它来替换旧版的数据查询获取功能,所以用PQ也可以帮我们获取网页的数据!

5cd719d9f52a2c1dce0932c5aacd8741.png

因为动图太大,无法上传,所以我就用截图去说明步骤:

1、点击上面的“自网站”,输入网址,按下“确定”

72712693eff8aedb39518ca7cb13d2b2.png

2、在出现的导航器中,点击Table开头的图标,右侧就会有这些表格的预览,选择你要导入的表格,按右下角的“加载”

e0e789c1ba9f0b72ee40c3de2db41b48.png

3、然后就能获取表格数据到Excel了,也是支持手动刷新和自动刷新的!

79e9dff1249a5418a2cb410e17bff2ff.png

VBA代码法

其实以上的方法还算不上真正的“爬虫”技能,若要更灵活地获取数据,就需要用到VBA代码了。

使用VBA获取网页数据,当然也是可以和上面的三种方法去结合使用,因为写代码意味着你可以判断,可以循环,就像上面的股票收盘价信息,你可以通过循环获取多个股票的数据了,会更方便喔!

例如通过用VBA调用第二种方法,结合Excel的基础功能对数据进行整理、提取,就可以实现历史天气数据的获取了!以下用VBA的方法来获取天气数据~

对于零售行业来说,天气确实是很重要的因素,会影响客流,会影响应季货品的销售,所以结合历史天气数据进行分析是很有必要的!

那怎么批量地获取天气数据呢?以下就是获取2019年11月北京历史天气数据的结果:

2b0fb79b7e01b2928b52ff66a29f3ab4.png

这就需要用到VBA代码了,以上的办法都不适合大批量地获取数据,不会代码?没关系,我已经写好了,而且也有解释,大家复制后只要稍作修改即可使用。(代码在文末)

如果你还想多城市、多年份、多月份地获取数据,那你就还需要考虑更多的情况了,大家可以基于文末提供的代码进行修改实现。

当然,你也可以购买我们现成的模板,直接就能使用~(后台回复 “ 天气 ” 查看详情,或点击文末的阅读原文)

2736963a85aa9e9e581859fe5e5e463b.png

以下是历史天气数据获取的VBA代码:

1. Sub Tianqi()
2.    Dim str As String
3.    On Error Resume Next
4.    Cells.Delete
5.    t1 = Time: n = 1
6.    For i = 2018 To 2019 '由2018到2019进行循环
7.        For j = 1 To 12 '按1-12月进行循环
8.            If j < 10 Then '给小于10的月份前补数字0(网址需要)
9.                t = 0
10.            Else
11.               t = ""
12.           End If
13.           str = i & t & j
14.           If i = Year(Date) And j > Month(Date) Then Exit For '如果时间大于本月则推出循环,主要是为了不循环今年的后几个月
15.            
16.            With ActiveSheet.QueryTables.Add("url;http://www.tianqihoubao.com/lishi/beijing/month/" & str & ".html", Range("a" & n)) '天气后报的网址,如果要爬某个城市的天气请把“beijing”改成对应的城市拼音即可
17.            
18.                .WebFormatting = xlWebFormattingNone '不包含格式
19.                .WebSelectionType = xlSpecifiedTables '指定table模式
20.                .WebTables = "1" '第1张table
21.                .Refresh False
22.            End With
23.            n = Cells(Rows.Count, 1).End(3).Row + 1
24.        Next
25.    Next
26.    Columns("A:D").Select
27.    ActiveSheet.Range("$A:$D").RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlNo '删除重复项
28.    Range("C:C,D:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove '插入空行
29.    Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True '分列
30.    Columns("D:D").TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True '分类
31.    Columns("F:F").TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True '分类
32.    ColumnCells.Replace " ", "", 2 '去掉空格
33.    Cells.Replace "℃", "", 2 '去掉℃
34.    Range("B1:G1") = Array("白天天气", "夜晚天气", "最高气温", "最低气温", "白天风", "夜晚风")
35.    str1 = Time - t1
36.    MsgBox Format(CDate(str1), "hh:mm:ss")
37. End Sub
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值