91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

VB寫WebBrowser捕捉信息

admin
2013年11月28日 11:35 本文熱度 5686
在大多數(shù)情況下,上網(wǎng)沖浪是件令人愉快的事情。但若是數(shù)百上千的超鏈接擺在你面前,而你又不得不一一點擊這些鏈接、進入相應(yīng)的網(wǎng)頁、手工篩選出每頁里你需要的信息、最后再將這些信息編進數(shù)據(jù)庫中、....,你將做何感想?如果每天都從事這種繁雜、枯燥的工作會不會讓你發(fā)瘋?
“自動上網(wǎng)機器人”或許可救你出“苦?!保耗憧梢院戎Х取⒙犞魳贰⒖粗皺C器人”辛勤地替你工作,那感覺是不是棒極了!
本文結(jié)合實例詳盡討論了用VB實現(xiàn)“上網(wǎng)機器人”的技術(shù)細節(jié)。我們知道,搜集和下載資料是人們使用互聯(lián)網(wǎng)的最主要的目的之一,但有些信息資源過于龐大,用手工摘取的方法是困難的或根本就是行不通的。例如,你需要搜集歐洲進口機械設(shè)備的公司名錄以便給他們發(fā)信邀請其參加博覽會,在網(wǎng)上找到這些信息并不難,但出于數(shù)據(jù)安全等方面的考慮,幾乎所有提供類似信息的網(wǎng)站都沒有提供直接下載數(shù)據(jù)的功能。
要想搜集齊想要的數(shù)據(jù),唯一可用的方法就是一頁一頁地瀏覽每個公司的信息頁,摘取其中有用的數(shù)據(jù)并存入數(shù)據(jù)庫。但當公司總數(shù)超過數(shù)千時,巨大的工作量會讓任何人望而卻步!其實,這浩大的工作完全可以由程序來完成,因為這些任務(wù)完全是機械的重復性工作。而且,用程序完成比用手工要快得多。本文涉及的技術(shù)細節(jié)是通用的,即對實例程序稍加修改就可完成任何“自動上網(wǎng)沖浪”任務(wù)。

自動撥號上網(wǎng)、自動處理中途掉線、任務(wù)完成后自動掛斷,這些都是“上網(wǎng)機器人”的最基本的功能之一。它還能給你帶來明顯的經(jīng)濟回報:如果你讓“機器人”在晚間至凌晨的上網(wǎng)費優(yōu)惠期內(nèi)撥號上網(wǎng)去自動沖浪,那真可稱得上是典型的“一石三鳥”----你睡覺、它工作、還省錢!有關(guān)這方面的細節(jié)將在本文的第三部分里討論。該部分提供了實現(xiàn)上述各功能的若干方法,并比較了這些方法各自的優(yōu)劣。


本文的第一和第二部分分別以兩個實例討論了自動瀏覽的技術(shù)細節(jié):在網(wǎng)頁上的輸入?yún)^(qū)內(nèi)自動填入數(shù)據(jù)以便完成諸如用戶登錄等的操作、自動更新CheckBox、自動選擇下拉式列表(ComboBox)的值、自動點擊網(wǎng)頁上的按鈕、從網(wǎng)頁上精確提取有用的數(shù)據(jù)并存盤、將網(wǎng)頁上二維表(Table)內(nèi)的數(shù)據(jù)一一提取出來并轉(zhuǎn)換且存儲成可直接導入數(shù)據(jù)庫或 Excel的格式,以及控制瀏覽進程的技巧等等。


第一部分 從網(wǎng)頁上精確提取數(shù)據(jù)







  VB寫WebBrowser捕捉信息 - 耗子 - 我的博客

本部分的實例是:下載滬深兩市全部約1100家個股的基本信息及財務(wù)數(shù)據(jù)。若用手工操作,如上圖所示,需要在股票代碼區(qū)內(nèi)分別輸入1100個股票代碼,在下拉式列表(ComboBox)中分別選擇“個股資料”和“財務(wù)數(shù)據(jù)解讀”,算下來約是2200次操作!這樣的工作當然是由程序來完成劃算得多。況且手工提取數(shù)據(jù)(先選中、再使用Ctrl+C拷貝)極容易出錯(多選或漏選),又很費眼神。


1. 在輸入?yún)^(qū)內(nèi)自動填入數(shù)據(jù)


為使程序能高效地自動瀏覽,需引入一些最基本的功能,如在輸入?yún)^(qū)內(nèi)自動填入數(shù)據(jù)、自動點擊按鈕等等。雖然用變換 URL地址的方法有時也能完成任務(wù),但往往過于費力,尤其當網(wǎng)頁上的輸入?yún)^(qū)較多時更是如此。


為了在輸入?yún)^(qū)內(nèi)輸入數(shù)據(jù),需要先搜索到該對象的名字,然后將該對象的值置為要填入的數(shù)據(jù)即可。搜索名字的工作可編程完成,亦可用 FrontPage輕松獲得。


2. 自動在下拉式列表(ComboBox)中進行選擇


同樣地,首先要獲得下拉式列表的名字。然后根據(jù)下拉式列表的元素總數(shù)(length屬性)在列表中搜索要設(shè)置的值(列表的 Options集合中元素的Text屬性),找到后,將該元素設(shè)為選中元素(元素的Selected屬性)。


3. 自動點擊按鈕


對于按鈕來講,可根據(jù)其名字訪問,亦可根據(jù)其值訪問。按鈕的值就是顯示在按鈕上的文字。一個按鈕可能沒有名字,但一定有值。本例的程序就是根據(jù)值來訪問按鈕。執(zhí)行按鈕的 Click方法就相當于點擊了該按鈕。


 圖二中紅色箭頭所指即為程序自動填入輸入框、自動在ComboBox中選擇以及自動點擊按鈕的情況。


4. 精確提取數(shù)據(jù)


僅將有用的數(shù)據(jù)存儲下來才是有意義的。必須研究網(wǎng)頁,找出有效數(shù)據(jù)所在的Tag區(qū)(可用文本編輯器或 FrontPage),然后用該對象的innerText屬性獲得最終的文本。本例中要存儲的數(shù)據(jù)如下圖所示,其所用的Tag為“PRE”。



下面給出的是實例程序的完整代碼:






' 程序一:從網(wǎng)頁上精確提取數(shù)據(jù)
'
' 為運行本程序,應(yīng)在“菜單->工程->部件”中添加“Microsoft Internet Controls”
' 并在“菜單->工程->引用”中添加“Microsoft HTML Object Library”
'
' 為了簡潔,程序僅下載九只個股的基本信息
Option Explicit
Private Const Form_ID = 1
Dim Code(9) As String
Dim Current As Long
Private Sub Form_Load()
Form1.MousePointer = 11
' 以下是個股代碼
' 為了程序簡潔,這里僅使用九只代碼。
' 而在真實環(huán)境中,應(yīng)從數(shù)據(jù)文件中讀入全部個股代碼。
Code(0) = "600001": Code(1) = "600002": Code(2) = "600003"
Code(3) = "600005": Code(4) = "600006": Code(5) = "600007"
Code(6) = "600008": Code(7) = "600009": Code(8) = "600010"
Current = 0
WebBrowser1.Navigate "www.stockstar.com.cn" ' 起始網(wǎng)址
End Sub

Private Sub WebBrowser1_DocumentComplete(ByValpDisp As Object, URL As Variant)
Dim i, k
Text2 = WebBrowser1.LocationURL ' 顯示當前網(wǎng)址
' 判斷當前網(wǎng)頁是否全部調(diào)入完畢
If Not (pDisp Is WebBrowser1.Object) Then Exit Sub
On Error Resume Next
Select Case Text2
Case "http://www.stockstar.com.cn/home.htm" ' 當進入主頁面時執(zhí)行以下程序
For i = 0 To WebBrowser1.Document.Forms(Form_ID).length - 1
' 找到代碼輸入框后填入個股代碼
If WebBrowser1.Document.Forms(Form_ID)(i).Name = "code" Then _
WebBrowser1.Document.Forms(Form_ID)(i).Value = Code(Current)
' 在下拉式列表中進行選擇
If WebBrowser1.Document.Forms(Form_ID)(i).Name = "target" Then
For k = 0 To WebBrowser1.Document.Forms(Form_ID)(i).length - 1
If WebBrowser1.Document.Forms(Form_ID)(i).Options(k).Text _
= "個股資料" Then
WebBrowser1.Document.Forms(Form_ID)(i).Options(k).Selected = True
Exit For
End If
Next k
End If
' 點擊按鈕
If WebBrowser1.Document.Forms(Form_ID)(i).Value = " 查詢 " Then _
WebBrowser1.Document.Forms(Form_ID)(i).Click
Next
Case Else ' 當進入數(shù)據(jù)頁面時執(zhí)行以下程序
For i = 0 To WebBrowser1.Document.All.length - 1
If WebBrowser1.Document.All(i).tagName = "PRE" Then
' 精確提取數(shù)據(jù)
Text1 = Text1 + Code(Current) + vbCrLf + _
WebBrowser1.Document.All(i).innerText + vbCrLf
Exit For
End If
Next
' 數(shù)據(jù)存盤
Open "C:\Data2.Txt" For Append As #1
Print #1, Text1: Text1 = "": Close #1
' 換下一只股票
Current = Current + 1
If Current >= 9 Then
' 上網(wǎng)任務(wù)完成后,應(yīng)在此調(diào)用自動掛斷過程。
Form1.MousePointer = 0: MsgBox "Finished!": End
End If
' 回退到主頁面,查詢下一只股票的信息
WebBrowser1.GoBack
End Select
End Sub

來源:肥菜刀的專欄


[NextPage]


第二部分 將網(wǎng)頁上的二維表導入數(shù)據(jù)庫


在上一部分中,我們討論了讓程序自動在網(wǎng)上瀏覽并將所需的數(shù)據(jù)準確、快速地存儲下來的方法。現(xiàn)在,我們將迎接更大的挑戰(zhàn):將網(wǎng)頁上以表格形式存在的二維數(shù)據(jù)提取出來,并存成可直接導入數(shù)據(jù)庫的“Microsoft Excel 逗號分隔值文件”(即.csv文件)。







  VB寫WebBrowser捕捉信息 - 耗子 - 我的博客

用手工在網(wǎng)頁上直接提取類似上圖中所示的表格數(shù)據(jù)是非常困難的。如果這樣的表格有數(shù)十頁甚至上百頁之多,手工提取工作將是不可想象的,而且非常容易出錯。


本部分的實例是:將滬深兩市全部約1100家個股的財務(wù)評分表數(shù)據(jù)(共54頁,每頁20家,如上圖所示)快速、準確地轉(zhuǎn)換成“.csv”文件。


1. 自動設(shè)置CheckBox的值


由于只有注冊用戶才能訪問上述財務(wù)評分表,因此實例程序首先演示了自動注冊的功能。下圖顯示的是注冊前以及自動注冊后的畫面。







  VB寫WebBrowser捕捉信息 - 耗子 - 我的博客

我們在上一部分中已討論了自動填寫輸入?yún)^(qū)以及自動點擊按鈕等的方法。對于自動設(shè)置CheckBox值,其方法完全類似:首先要搜索到該CheckBox的名字,然后將該對象的Checked屬性置為True或False即可。


2. 將網(wǎng)頁上的二維表導入數(shù)據(jù)庫


首先定義一個IHTMLElementCollection對象用于收集網(wǎng)頁上所有的 Table,然后用getElementsByTagName方法執(zhí)行收集工作:







Dim Tables AsIHTMLElementCollection
Set Tables = WebBrowser1.Document.getElementsByTagName("Table")

 


 


一個網(wǎng)頁上往往有多個 Table。我們用HTMLTable對象來處理每個Table:







Dim Table1 AsHTMLTable
For Each Table1 In Tables
Next

HTMLTable對象的innerText屬性記錄了整個 Table的全部信息,包括字段名。因此我們可以根據(jù)字段名判斷出哪個 Table是我們需要的。


為了逐行逐列地提取數(shù)據(jù),我們還需要HTMLTableRow對象和HTMLTableCell對象:







Dim Row AsHTMLTableRow, Cell As HTMLTableCell
For i = 1 To Table1.rows.length - 1 ' 逐行處理
Set Row = Table1.rows(i)
j = 0
For Each Cell In Row.cells ' 逐列處理
' Row.cells(j).innerText即為當前行及當前列上的單元數(shù)據(jù)
Text1 = Text1 + Trim(Row.cells(j).innerText) + ","
j = j + 1
Next
' 一行處理完畢后,去除行尾的逗號并加上回車
Text1 = Left(Text1, Len(Text1) - 1) + vbCrLf
Next

至此,當前網(wǎng)頁上的二維表已轉(zhuǎn)換成“.csv”格式。


3. 自動瀏覽時的頁面控制技巧


我們從上個例子中就已經(jīng)清晰地看到,自動瀏覽程序的主體是WebBrowser控件的DocumentComplete事件。只有在當前頁面已被完全調(diào)入后,我們才能開始對當前頁面進行數(shù)據(jù)處理,然后再根據(jù)當前在哪個頁面來決定下一步的瀏覽方向。


需要指出的是,DocumentComplete事件的發(fā)生并不一定意味著當前頁面已被全部調(diào)入。如果頁面上沒有其它子框架(frames),發(fā)生DocumentComplete事件即表明當前頁面(即主框架)已完成調(diào)入;若頁面上有多個框架,則每個框架完成時都會發(fā)生DocumentComplete事件;當所有子框架都完成后,主框架最后產(chǎn)生一次DocumentComplete事件。為了判斷出這最后一次DocumentComplete事件,需要比較每次事件發(fā)生時的對象(pDisp)是否是WebBrowser控件對象本身:







Private Sub WebBrowser1_DocumentComplete(ByValpDisp As Object, _
URL As Variant)
If (pDisp Is WebBrowser1.Object) Then
Debug.Print "Document is finished loading."
End If
End Sub

下面是實例程序的完整代碼(運行該程序可得到完整的1061行“.csv”格式的數(shù)據(jù),分別代表1061個上市公司的財務(wù)信息。該文件可直接導入Access數(shù)據(jù)庫或 Excel中。):







' 程序二:將網(wǎng)頁上的二維表導入數(shù)據(jù)庫
'
' 為運行本程序,應(yīng)在“菜單->工程->部件”中添加“Microsoft Internet Controls”
' 并在“菜單->工程->引用”中添加“Microsoft HTML Object Library”
'
Option Explicit
Dim Page As Long
Private Sub Form_Load()
Form1.MousePointer = 11
WebBrowser1.Navigate "www.stockstar.com.cn" ' 起始網(wǎng)址
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim Table1 As HTMLTable, Tables As IHTMLElementCollection
Dim Row As HTMLTableRow, Cell As HTMLTableCell
Dim i, j, tmp
Text2 = WebBrowser1.LocationURL ' 顯示當前網(wǎng)址
' 判斷當前網(wǎng)頁是否全部調(diào)入完畢
If Not (pDisp Is WebBrowser1.Object) Then Exit Sub
On Error Resume Next
Select Case Text2
Case "http://www.stockstar.com.cn/home.htm" ' 當進入主頁面時執(zhí)行以下程序
' 用戶注冊登錄
For i = 0 To WebBrowser1.Document.Forms(0).length - 1
' 找到 CheckBox 后,將其值改為 False,以防止用戶名及密碼被存儲
If WebBrowser1.Document.Forms(0)(i).Name = "checkSavePW" Then _
WebBrowser1.Document.Forms(0)(i).Checked = False
If WebBrowser1.Document.Forms(0)(i).Name = "userId" Then _
WebBrowser1.Document.Forms(0)(i).Value = "kompass_china"
If WebBrowser1.Document.Forms(0)(i).Name = "passwd" Then _
WebBrowser1.Document.Forms(0)(i).Value = "kompass1"
' 此處是按名字訪問按鈕(上例中是按值訪問按鈕)
If WebBrowser1.Document.Forms(0)(i).Name = "continue" Then _
WebBrowser1.Document.Forms(0)(i).Click
Next
Case "http://my.stockstar.com/scripts/mystockstar.dll?login"
' 當用戶登錄完成后,準備打開表格的第一頁
WebBrowser1.Navigate "http://finance.stockstar.com/scripts/finance.dll?" + _
"showstkdfpm&begin=0&ret=1&index=2&concode=01"
Page = 1
Case Else ' 當進入數(shù)據(jù)頁面(表格的第一頁至最后一頁)時執(zhí)行以下程序
Set Tables = WebBrowser1.Document.getElementsByTagName("Table")
For Each Table1 In Tables
If Left(Table1.innerText, 2) = "名次" Then ' 找到需要的Table
' 將表格轉(zhuǎn)換成“.csv”格式
For i = 1 To Table1.rows.length - 1
Set Row = Table1.rows(i)
j = 0
For Each Cell In Row.cells
Text1 = Text1 + Trim(Row.cells(j).innerText) + ","
j = j + 1
Next
Text1 = Left(Text1, Len(Text1) - 1) + vbCrLf
Next
' 數(shù)據(jù)存盤
Open "C:\Data.csv" For Append As #1
Print #1, Left(Text1, Len(Text1) - 2): Text1 = "": Close #1
Exit For
End If
Next
' 準備打開下一頁
Page = Page + 1
tmp = "http://finance.stockstar.com/scripts/finance.dll?showstkdfpm&ret=" + _
Trim(Str(Page)) + "&index=2&concode=01"
If Page <= 54 Then ' 判斷是否瀏覽結(jié)束
WebBrowser1.Navigate tmp
Else
' 上網(wǎng)任務(wù)完成后,應(yīng)在此調(diào)用自動掛斷過程。
Form1.MousePointer = 0
MsgBox "Finished!!": End
End If
End Select
End Sub

以下給出的是上述程序所存數(shù)據(jù)文件的片段:







1,樂凱膠片,600135,材料,81.493,18.445,23.165,8.850,20.717,10.315
2,歌華有線,600037,傳播娛樂,80.553,13.009,22.256,12.141,20.304,12.844
3,外運發(fā)展,600270,倉儲運輸,80.326,17.331,23.005,8.829,19.900,11.261
4,東方鉭業(yè),0962,有色金屬,80.312,15.160,22.483,11.648,21.290,9.730
5,雙匯發(fā)展,0895,食品,79.772,15.428,20.673,11.508,20.235,11.930
6,四川美豐,0731,化肥,79.361,15.795,23.235,11.323,16.921,12.088
... ... ...
1059,輪胎橡膠,600623,車類,7.167,8.265,10.973,-34.411,14.120,8.219
1060,PT吉輕工,0546,日用輕工產(chǎn)品,-11.895,5.740,-49.149,7.999,14.136,9.379
1061,廣船國際,600685,機械儀器,-57.452,9.824,-1.528,-89.648,14.366,9.533

該文章在 2013/11/28 11:35:53 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品玖玖玖 | 爱豆精品秘国产传媒 | 国产激情视频网站 | 国产黑料导航网福利 | 国产精品片在线观看 | 91国产香蕉 | 精品福利91 | 青青国产在线播放 | 乱淫67194| 精品国产亚洲 | 国产精品先锋 | 国产妇女视频免费 | 日韩一级中文字幕 | 老汉色影院首页 | 97人人爱17网 | 果冻剧精品传媒入口 | 国内自拍视频91 | 精品熟女中文字幕 | 国产拳头 | 国产自产在线观 | 精品专区 | 果冻传媒 | 青青草国产成 | 理论片国产在 | 韩国日本在线电影 | 国产精品自产拍在 | 国产精品交换 | 欧美另类激情 | 青草久操 | 精品九九| 国内自拍网 | 精品a在线观看 | 欧美一级成人观 | 国产原创精品 | 日韩中文视 | 欧美亚洲a∨中文 | 国产高清在线免 | 精品电影在线观看 | 日韩精品欧美一区喷 | 国产老女露脸二区 | 日韩城人影院 |