如何用 Access 分析一個網站,或者在網站上提交一個查詢,得到結果后存儲進數據庫哪?
如何用 Access 下載 DVBBS 論壇上所有的帖子?
如何用 ACCESS 編寫灌水程序?
方法一:
答案非常簡單—— DHTML 編程。
有人可能問了,ACCESS 使用的是 VBA ,而 DHTML 中使用的是 VBS 怎么可能通用哪?其實 VBS / VBA 都是 VB 的子集。在 Access 中只要引用
Microsoft Internet Controls
Microsoft HTML Object Library
即可,然后在窗體上加入 “Microsoft Web 瀏覽器”控件
好了,下面就以我寫的一個讀取某 IP 物理地域查詢網站頁面的數據庫為例說明 DHTML / “Microsoft Web 瀏覽器”控件在 ACCESS 的應用吧。
“Microsoft Web 瀏覽器”控件的作用是什么哪?主要就是為了獲得 DOCUMENT 對象的,DHTML 的操作都是以 DOCUMENT 對象為運行基礎的。
要完成讀取網頁的功能我們必須了解 DHTML 的幾個簡單的對象以及屬性
1、DOCUMENT 對象:代表這整個 HTML 文檔
2、BODY 對象:是 DOCUMENT 對象的子對象,里面存儲著所有顯示給用戶看的 HTML 代碼
3、innerText 屬性:頁面中顯示給客戶看的文本,注意:不是 HTML 代碼呦
4、innerHTML屬性:構成頁面的 HTML 代碼
5、對象.all.length屬性:頁面中所有 element 的個數。(all 用于表示所有對象)
ok ,接下來就讓我們一邊寫代碼,一邊分析吧:
以下為引用的內容:
Option Compare Database
Dim blnSwitch As Boolean
Private Sub Command1_Click() '用于啟動瀏覽功能
Me.WebBrowser3.Navigate ("http://ip.loveroot.com/index.php?job=search")
End Sub
Private Sub Command11_Click() '將需要搜索的IP 寫入全局變量
splitIP Text1.Value
End Sub
Function splitIP(strip) '將需要搜索的IP 寫入全局變量
Dim a() As String
strip = strip & "."
a = Split(strip, ".")
Dim i As Long
For i = 0 To UBound(a)
If a(i) = "" Then a(i) = "0"
lngSearchIP(4 - i) = CLng(a(i))
Next i
End Function
Sub WriteLog(ip1 As String) '讀取結果
Dim dc As MSHTML.HTMLDocument
Dim Bd As MSHTML.HTMLBody
Dim El As MSHTML.HTMLElementCollection
Dim strip As String
Dim strAdd As String
Dim strSql
Dim i As Long
Set dc = WebBrowser3.Document
Set Bd = dc.body
Dim lngStart As Long
'循環 DOCUMENT 中所有的元素獲取需要的字符
For i = 0 To dc.all.length - 1
'由于該服務器重寫界面,我改了一下分析代碼
'If dc.all(i).tagName = "p" And Left(dc.all(i).innerText, 4) = "查詢結果" Then
If dc.all(i).tagName = "p" And Left(dc.all(i).innerText, 8) = "官方數據查詢結果" Then
'由于該服務器重寫界面,我改了一下分析代碼
'strAdd = Mid(dc.all(i).innerText, InStr(1, dc.all(i).innerText, "(") + 2, InStr(1, dc.all(i).innerText, ")") - InStr(1, dc.all(i).innerText, "(") - 3)
'strip = Mid(dc.all(i).innerText, InStr(1, dc.all(i).innerText, "查詢結果:") + 6, InStr(1, dc.all(i).innerText, "(") - InStr(1, dc.all(i).innerText, "查詢結果:") - 7)
strAdd = Right(dc.all(i).innerText, Len(dc.all(i).innerText) - InStr(dc.all(i).innerText, " - ") - 3)
strip = strNowIP
LabelSIP.Caption = strip & strAdd
'ok 終于得到需要的數據了,用 SQL 語句直接寫入數據庫吧
strSql = "update ipaddress set [ip1]='" & strip & "',[add]='" & strAdd & "' where mark='last'"
CurrentProject.Connection.Execute strSql
strSql = "insert into ipaddress([ip1],[add],[mark],[enip]) values('" & strip & "','" & strAdd & "','no'," & CStr(enaddr(strip)) & ")"
CurrentProject.Connection.Execute strSql
新聞熱點
疑難解答