VB 获取网页 数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB 获取网页 数据相关的知识,希望对你有一定的参考价值。

用WebBrowser加载了一个网页,网页源码中的数据部分:
<ul class="list">
<li class="list1"><p>032611314908</p><p>3天前</p></li>
<li class="list3"><p>2010-3-26 14:05</p></li>
<li class="list2"><p>李晓繁</p></li>
<li class="list2"><p><span class="red">20</span>元</p><p>数量 1</p></li>
<li class="list3"><p><a href="#" onClick="firmx('xiangxixinnxi.asp?chuli=goto&numbs=032611314908')" title='详细信息'><img src="images/bgtn.gif" /></a></p></li>
</ul>
.
.
.
有多条以上数据 怎么获取这些数据: 032611314908 3天前 2010-3-26 14:05 李晓繁 20元 数量1 以及链接xiangxixinnxi.asp?chuli=goto&numbs=032611314908
我初学vb,^_^请尽量详细,谢谢

'[获取网页数据,支持多条数据]
Private Sub Command1_Click()
Dim myMatch As Object
Dim myMatches As Object
Dim myRegExp As Object
Set myRegExp = CreateObject("VBScript.RegExp")
Dim strhtml As String
strHtml = WebBrowser1.Document.documentelement.outerhtml '获取网页源代码
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "<ul class=[""']?list[""']?>[\s\S]*?<p>(.+?)</p>[\s\S]*?<p>(.+?)</p>[\s\S]*?<p>(.+?)</p>[\s\S]*?<p>(.+?)</p>[\s\S]*?<p>(.+?)</p>[\s\S]*?<p>(.+?)</p>[\s\S]*?<p>(.+?)</p>[\s\S]*?</ul>"
Set myMatches = myRegExp.Execute(strHtml)
Dim s As String
For Each myMatch In myMatches
'提取的数据之间用TAB键(vbTab)进行了分隔,行与行之间使用了回车(vbCrLf)进行分隔
s = s & myMatch.SubMatches(0) & vbTab '类似:032611314908
s = s & myMatch.SubMatches(1) & vbTab '类似:3天前
s = s & myMatch.SubMatches(2) & vbTab '类似:2010-3-26 14:05
s = s & myMatch.SubMatches(3) & vbTab '类似:李晓繁
s = s & RemoveTags(myMatch.SubMatches(4)) & vbTab '类似:20元
s = s & myMatch.SubMatches(5) & vbTab '类似:数量1
s = s & GetLink(unHtmlEntities(myMatch.SubMatches(6))) '类似:xiangxixinnxi.asp?chuli=goto&numbs=032611314908
s = s & vbCrLf
Next
Text1.Text = s
End Sub

'[还原特殊的HTML编码的函数]
Function unHtmlEntities(ByVal strHtml As String) As String
Dim s As String
s = strHtml
s = Replace$(s, "&", "&")
s = Replace$(s, "<", "<")
s = Replace$(s, ">", ">")
s = Replace$(s, """, """")
s = Replace$(s, "'", "'")
unHtmlEntities = s
End Function

'[移除HTML标签的函数]
Function RemoveTags(ByVal strHtml As String) As String
Dim myRegExp As Object
Set myRegExp = CreateObject("VBScript.RegExp")
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "<.+?>"
RemoveTags = myRegExp.Replace(strHtml, "")
End Function

'[获取onclick事件中的链接地址的函数]
Function GetLink(ByVal strHtml As String) As String
Dim myMatch As Object
Dim myMatches As Object
Dim myRegExp As Object
Set myRegExp = CreateObject("VBScript.RegExp")
myRegExp.IgnoreCase = True
myRegExp.Pattern = "\('(.+?)'\)"
Set myMatches = myRegExp.Execute(strHtml)
GetLink = myMatches(0).SubMatches(0)
End Function
参考技术A VB正则表达式可以解决这些问题

'新建工程
'插入text1,text2,command1
'text1与text2的MultiLine属性设置成true
'将你提取的网页信息赋值到text1.text中

'工程需要引用Microsoft VBScript Regular Expressions5.5
'单击工程菜单----引用-----Microsoft VBScript Regular Expressions5.5
Private Sub Command1_Click()
On Error Resume Next
Text2.Text = ""
p = "\d12" '取编号
Text2.Text = Text2.Text + Test(p, Text1.Text, 1) + vbCrLf
p = "[l|L][i|I][s|S][t|t][2]\S*[\u4e00-\u9fa5]+" '取姓名
s = Test(p, Text1.Text, 1)
s = Test("[\u4e00-\u9fa5]+", s, 1)
Text2.Text = Text2.Text + s + vbCrLf
p = "\d+(天)[\u4e00-\u9fa5]" '取几天前数据
Text2.Text = Text2.Text + Test(p, Text1.Text, 1) + vbCrLf
p = "\d4(\-|\/|\.)\d1,2\1\d1,2\ *[012]0,1\d(:)\d1,2" '取时间
Text2.Text = Text2.Text + Test(p, Text1.Text, 1) + vbCrLf
p = "[\u4e00-\u9fa5](量)\ *\d+" '取数量
Text2.Text = Text2.Text + Test(p, Text1.Text, 1) + vbCrLf
p = "\d+\S+(元)" '取金额
s = Test(p, Text1.Text, 1)
s = Test("\d+", s, 1) + "元"
Text2.Text = Text2.Text + s + vbCrLf
p = "\w+(\.)\w+(\?)\w+(=)\w+(\&)\w+(=)\d+" '取提交链接
Text2.Text = Text2.Text + Test(p, Text1.Text, 1)

End Sub

Private Function Test(p, s, c)
'p为正则表达式,s为测试字符串,c表示取第一个找到的值还是取第2个还是第c个
'如果指定第几个大于全部字符串数量将取最后一个,取全部字符串选0
Dim x As RegExp
Dim n As Integer
n = 0
Set x = New RegExp
x.Pattern = p
x.IgnoreCase = True
x.Global = True
Set a = x.Execute(s)
If c = 0 Then
For Each b In a
Test = Test & b.Value & vbCrLf
Next
Else
For Each b In a
Test = b.Value
n = n + 1
If n = c Then Exit For
Next
End If
End Function
参考技术B 关注

vb 获取一个网页内的链接和链接名称

vb 获取一个网页内的链接和链接名称,把所有显示在listbox 中,每条显示比如:百度|http://baidu.com
请问VB代码怎么写

上面问题知道你http://zhidao.baidu.com/question/87393556.html?si=3这里回答过 但是我VB运行不了 请把代码写详细点 谢谢了

参考技术A VB读取链接,可以用webbrowser载入,然后用类似javascript的方法获取网页中的元素及其属性。
也可用inet或xmlhttp取得网页代码,然后进行文本处理,可以用正则表达式处理。来自:求助得到的回答本回答被提问者和网友采纳
参考技术A 如果你正确加载了WEB浏览器控件,是可以运行代码的

以上是关于VB 获取网页 数据的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 如何获取网页中的数据

VB如何获取网页动态数据

VB中获取网页数据

VB如何获取网页的内容

vb.net如何访问https网页

用Vb提取网页中的数据