关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
最近在弄Excel vba 网抓教程,写了不少实例。春节过后,写个网抓天气预报。
这个天气预报有现成的接口,不过要注册帐号什么的,有些麻烦。所以,我打算直接抓取“中国天气网”的数据。
在第一个表格加一个按钮,选择省份和城市,再点击按钮即可。那些城市代码信息也是我自己收集整理的,弄了一个下拉框联动。效果如下图:
代码如下:
'按钮点击事件' Sub btnQuery_Click() On Error GoTo Err_Handle: Dim strCity As String strCity = WorksheetFunction.VLookup([B2], [城市代码表!A:B], 2, 0) GetWeather strCity Exit Sub Err_Handle: MsgBox "请选择省份和城市" End Sub '网抓数据' '参数:strCity 字符串,城市代码' Public Sub GetWeather(strCity As String) On Error GoTo Err_Handle: [A5:D11].ClearContents '清空数据' '创建XmlHttp对象' Dim xmlHttp As Object Set xmlHttp = CreateObject("MSXML2.XMLHTTP") '创建并发送请求' xmlHttp.Open "GET", "http://www.weather.com.cn/weather/" & strCity & ".shtml", False xmlHttp.setRequestHeader "If-Modified-Since", "0" '不要缓存' xmlHttp.Send '等待响应' Do While xmlHttp.readyState <> 4 DoEvents Loop '得到响应结果' Dim strResponse As String strResponse = xmlHttp.responsetext '创建正则表达式对象' Dim regExp As Object Set regExp = CreateObject("VBScript.RegExp") '设置正则表达式' regExp.Global = True '这个表达式比较复杂,估计只有上帝和我知道是怎么回事。' '过段时间应该就只有上帝才知道。' '具体分析可以看我的《Excel vba 网抓教程》' regExp.Pattern = "([\s\S]+?)[\s\S]+?""wea"">([\s\S]+?)[\s\S]+?(\d+?)[\s\S]+?([\s\S]+?)[\s\S]+?([\s\S]+?)" '匹配结果' Dim matches As Object, i As Long, arr() Set matches = regExp.Execute(strResponse) If matches.Count = 0 Then MsgBox "找不到天气信息" Exit Sub End If '处理匹配结果' ReDim arr(matches.Count - 1, 3) For i = 0 To matches.Count - 1 arr(i, 0) = matches(i).SubMatches(0) arr(i, 1) = matches(i).SubMatches(1) arr(i, 2) = matches(i).SubMatches(2) & "/" & matches(i).SubMatches(3) arr(i, 3) = matches(i).SubMatches(4) Next [A5:D11] = arr '写到Excel中' Exit Sub Err_Handle: MsgBox Err.Description End Sub
原理不复杂,就是通过城市代码抓取对应的天气预报数据。通过正则表达式匹配结果并处理。
百度网盘下载:http://pan.baidu.com/s/1eRdmpaU 密码: ehq9
18665917059@163.com
杨老师您好,我购买了您的网抓课程,第一个手机号码的网站已经过期:http://v.showji.com/Locating/showji.com20150416.aspx?output=json 请问,现在改成了什么呢?
2017-09-04 03:24 回复