已有23人关注
《范例完全自学手册》100例学习问题提取天气预报问题
发表在VB答疑区 2009-12-25
是否精华
版块置顶:
老师如果网页的字符都是动态的怎么提取啊比如上面的网页里边的“12月22日多云转阵雪”这些数据都是变量第2天数据就变了怎么定位啊比如下面的代码:
<string>12月22日 多云转阵雪</string> 
  <string>-16℃/-6℃</string> 
  <string>西风微风</string> 
  <string>1.gif</string> 
  <string>13.gif</string> 
  <string>12月23日 晴</string> 
  <string>-17℃/-5℃</string> 
  <string>西风微风</string> 
  <string>0.gif</string> 
  <string>0.gif</string> 
  <string>12月24日 多云转中雪</string> 
  <string>-13℃/-4℃</string> 
  <string>西南风微风转西风微风</string> 
  <string>1.gif</string> 
  <string>15.gif</string> 
  <string>12月25日 中到大雪转阵雪</string> 
  <string>-21℃/-7℃</string> 
  <string>北风3-4级</string> 
  <string>27.gif</string> 
  <string>13.gif</string> 
  <string>12月26日 多云</string> 
  <string>-23℃/-13℃</string> 
  <string>北风微风转东北风微风</string> 
  <string>1.gif</string> 
  <string>1.gif</string> 
  </ArrayOfString> 
分享到:
精彩评论 8
学分: LV1
2009-12-25
沙发
您好:
  您还是没明白,这个只是字符串处理的问题,就是因为天气数据是变化的,所以要将这个数据提取出来,然后将其保存在一个变量中,在显示出来。
  首先,您要弄懂字符串函数的作用。例如函数instr,用来查找指定字符串的位置,我们要查找的是 与天气数据有关的字符串,例如<string>出现的位置,然后在从这个位置开始查找</string> 第一次出现的位置,<string>和</string>之间的数据,就是天气信息。(<string>12月22日 多云转阵雪</string> ),然后用mid,left,right等函数将这个数据提取出来就行了 
CSDN00008
学分:0 LV1
2009-12-26
板凳
 weatherpage = WebBrowser1.Document.documentElement.innerHTML
    nhBegin = InStr(1, weatherpage, "<string>")          '获取标志"<string>"的字符所在位置
    nhEndc = InStr(1, weatherpage, "</string> ")          '获取标志"</string>的字符所在位置
 这只能提取第一次出现的位置啊这个网页原码下面的信息都想提取这个方法怎么实现啊
比如我想提取"<string>") 第3次出现的位置怎么提取啊
12月23日 晴
-17℃/-5℃
学分: LV1
2009-12-27
地板
 还是使用那几个函数进行字符串的处理
instr用于获取<string>出现的位置,获取第一个<string>可以写成
 InStr(1, weatherpage, "<string>")
获取第二个,改变一下起始位置就行了
 nhBegin=InStr(9, weatherpage, "<string>")
这样就是获取第二个<string>的位置了,上面代码中的“9”,可以用变量nhBegin+8来表示
CSDN00008
学分:0 LV1
2009-12-29
4L
·根据老师的提示我这样写的代码但是得到的结果不对啊请老师指点  回复于:2009-12-27 09:01:50 5楼   


CSDN00008


 
 
 Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim weatherpage As String
Dim city As String
Dim weather As String
Dim temperature As String
Dim nhBegin As Long
Dim nhEndc As Long
Dim nhEndw As Long
Dim nhEndt As Long
'判断是否能打开网页
If WebBrowser1.LocationName = "找不到服务器" Then
Label1.Caption = ""
MsgBox "无法打开网页进行获取", 48, "信息提示"
Exit Sub
End If
'获取网页内容
weatherpage = WebBrowser1.Document.documentElement.innerHTML
nhBegin = InStr(1, weatherpage, "<string>") '获取标志<string>的字符所在位置
nhEndc = InStr(1, weatherpage, "</string>") '获取标志</string>的字符所在位置
Text1.Text = Mid(weatherpage, nhBegin + 8, nhEndc - nhBegin + 8)



结果获取到的是:
<STYLE>

而不是: 
<string>吉林 白山</string> 中的地名:吉林 白山
 
 
这样写虽然可以获得想要的地址“吉林 白山”但是因为 <string>吉林 白山</string> 
中间的地名是个变量所以地名变化以后就取不到正确的地址了
nhBegin = InStr(1, weatherpage, "吉林") '获取标志地名的字符所在位置
Text1.Text = Mid(weatherpage, nhBegin, 5)
还是请老师指教一下怎么根据<string> </string> 获取中间的地名
还有后边出现的多个<string> </string>中间的气象信息
谢谢老师了

如果换成把网页保存成文件在从文件提取这些信息就可以提取了
但是我想学习直接这样提取请老师指教
学分: LV1
2009-12-30
5L
您好:
使用WebBrowser控件获取的网页源码与在网页中直接获取的源码是不一样的。所以您按照您直接获取的源码提取到的信息就不对了。
您可以将使用这个控件获取的源码放到文件中在进行提取信息。
或者使用Inet控件提取源码,用这个控件 使用您的代码进行提取源码就没有问题了。
weatherpage=inet1.OpenURL("...")引号内为网页地址,weatherpage就是获取的网页源码了

CSDN00008
学分:0 LV1
2009-12-30
6L
代码如下:
weatherpage = Inet1.OpenURL("http://www.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theUserID=&theCityCode=738")
    nhBegin = InStr(1, weatherpage, "<string>")          '获取标志气温的字符所在位置
    
    Text1.Text = Mid(weatherpage, nhBegin, 42)

提取出来的结果<string>   </string>可以直接提取出来和定位了但是中间要提取的信息却变成乱码了
提取出来的信息如下:

<string>
CSDN00008
学分:0 LV1
2009-12-31
7L
老师这个网页好象是UTF-8编码的不能那样直接提取吧好象需要转换一下编码后提取请老师指点
学分: LV1
2009-12-31
8L
  那就需要将获取的源码转换为简体中文
  建议在网上搜索一下编码转换的函数
首页上一页 1 下一页尾页 8 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照