Excel怎么抓取网络数据?

网友解答: Excel抓取并查询网络数据可以使用“获取和转换”+“查找引用函数”的功能组合来实现。例:下图是百度百科“奥运会”网页中的一个表格,我们以此为例实现抓取该表格至Excel中,

网友解答:

Excel抓取并查询网络数据可以使用“获取和转换”+“查找引用函数”的功能组合来实现。

例:下图是百度百科“奥运会”网页中的一个表格,我们以此为例实现抓取该表格至Excel中,并且能够通过输入第几届来查询对应的举办城市。

Step1:使用“获取和转换”功能将网络数据抓取至Excel中

依次点击“数据选项卡”、“新建查询”、“从其他源”、“从Web”。

弹出如下窗口,手动将百度百科“奥运会”的网址复制粘入URL栏,并点击确定。

Excel与网页连接需要一定时间,稍等片刻后会弹出如下窗口,左边列表中的每个Table都代表该网页中的一个表格,挨个点击预览后发现,Table3是我们所需的数据。

点开下方的“加载”旁边的下拉箭头,选择“加载到”。

在弹出的窗口中,在“选择想要在工作薄中查看此数据的方式”下选择“表”,并点击加载。

如图,网页表格中的数据已被抓取至Excel中。

依次点击“表格工具”、“设计”,将“表名称”改为奥运会。

Step2:使用“查找与引用”函数实现数据查询

建立查询区域,包含“届数”和“主办城市”,在届数中随意选取一届输入,下图输入“第08届”,在主办城市下输入vlookup函数,可以得到第08届奥运会的主办城市是巴黎,当更改届数时,对应的主办城市也随之变动。

公式:=VLOOKUP([届数],奥运会[#全部],4,0)

注意点:若网页中的数据变动较频繁,则可以设置链接网页的数据定时刷新:

①将鼠标定位于导入的数据区域中,切换到【设计】选项卡,点击【刷新】下拉箭头→【链接属性】

②在弹出的【链接属性】对话框中,设置【刷新频率】,比如设置为10分钟进行刷新。这样,每隔10分钟数据就会刷新一次,时刻保证获取的数据位最新的。


「精进Excel」系酷米签约作者,关注我,如果任意点开三篇文章,没有你想要的知识,算我耍流氓!

网友解答:

大家好,我是@Excel实例视频网站长@欢迎私信或者邀请我回答Excel相关问题!


有人在群里问手机号怎么批量查归属地,第一感觉是百度一下,结果还真没找到好用的,既然如此,我就自己写一个吧!首先找了几个webapi,找到个挺好用的,就用vba写了个自定义函数,测试下感觉还是挺好用,速度也挺快

源文件下载链接请私信回复63005即可

使用方法:

1.在本表中直接在A1列输入手机号即可

2.要在其他表中,alt+f11打开vbe编辑器,复制模块中代码,在你的新表中建立模块,粘贴代码即可

3.函数参数说明

GetPhoneInfo(号码,参数)

号码—即单个手机号

参数(1,2,3,4):1-城市,2-省,3-运营商, 4-全部

代码如下

Dim ObjXML As Object

Function GetPhoneInfo(number, Optional para As Byte = 1)

'获取手机号对应的基本信息 默认为城市

'para:1-城市,2-省,3-运营商,4,全部

Dim s As String

s = GetBody("http://v.showji.com/Locating/showji.com2016234999234.aspx?output=json&callback=querycallback&m=" & number)

Select Case para

Case 1

GetPhoneInfo = HtmlFilter(s, "City"":""", """")

Case 2

GetPhoneInfo = HtmlFilter(s, "Province"":""", """")

Case 3

GetPhoneInfo = HtmlFilter(s, "TO"":""", """")

Case 4

GetPhoneInfo = HtmlFilter(s, "City"":""", """") & "," & HtmlFilter(s, "Province"":""", """") & "," & HtmlFilter(s, "TO"":""", """")

End Select

GetPhoneInfo = Replace(GetPhoneInfo, " ", "")

End Function

Private Sub Test()

Dim i&, j&, k&, arr, brr

url = "http://v.showji.com/Locating/showji.com2016234999234.aspx?output=json&callback=querycallback&m=15698151655"

Debug.Print GetBody(url)

End Sub

'''如果出现乱码,UTF-8可改为GB2312

Public Function GetBody(ByVal url$, Optional ByVal Coding$ = "utf-8")

On Error Resume Next

Set ObjXML = CreateObject("Microsoft.XMLHTTP")

With ObjXML

.Open "Get", url, False, "", ""

'.setRequestHeader "If-Modified-Since", "0"

'.setRequestHeader "User-Agent", _

".Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"

.Send

GetBody = .ResponseBody

End With

GetBody = BytesToBstr(GetBody, Coding)

Set ObjXML = Nothing

End Function

Public Function BytesToBstr(strBody, CodeBase)

Dim ObjStream

Set ObjStream = CreateObject("Adodb.Stream")

With ObjStream

.Type = 1: .Mode = 3: .Open:

.Write strBody: .Position = 0: .Type = 2: .Charset = CodeBase

BytesToBstr = .ReadText: .Close

End With

Set ObjStream = Nothing

End Function

Public Function HtmlFilter(ByVal htmlText$, ByVal Label1$, ByVal label2$)

'返回html字符串lable1和最近的lable2标签中的数据

Dim pStart As Long, pStop As Long

pStart = InStr(htmlText, Label1) + Len(Label1)

If pStart < 0 Then

pStop = InStr(pStart, htmlText, label2)

HtmlFilter = Mid(htmlText, pStart, pStop - pStart)

End If

End Function

标签: