用 Access 分析网站一例

access

用 Access 分析网站一例

 

 

问题:

如何用 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
            Exit For
        End If
    Next i

    Dim strNewIP As String
    strNewIP = refreshIP
    On Error Resume Next
    '利用 DHTML 的 innerHTML 来更改网页的源代码,建立一个简单的 FORM ,然后提交给服务器,继续查询下面的 IP
    Bd.innerHTML = "<form method='POST' action='index.php?job=search' target='_parent'><input type='text' name='search_ip' ><input type='submit' value='查询' name='B1'></form>"
    '在 INPUT TEXT search_ip 中填入 IP。
    dc.all.Item("search_ip").Value = strNewIP
    '用 DHTML 提交 FORM 到服务器
    dc.all.Item("b1").Click
End Sub

Private Sub Form_Open(Cancel As Integer)
Text1.Value = Nz(DLookup("ip1", "ipaddress", "[mark]='last" & Me.Caption & "'"), "1.0.0.0")

End Sub

Private Sub WebBrowser3_DownloadComplete()
    '该事件在页面成功下载到本地时运行,这时候 DOCUMENT 对象
    '已经完全被客户端浏览器读取了,我们只要获取 Body 对象中的 innerHTML 即可
    If Len(strNowIP) = 0 Then
        splitIP Text1.Value
    End If
    
    If check1.Value = True Then
            Call WriteLog("61.12.15.117")
    End If
End Sub

Function refreshIP() As String      '搜索完一个IP以后再搜索下面一个
    Dim i As Long
    lngSearchIP(2) = lngSearchIP(2) + 1
    For i = 2 To 4
        If lngSearchIP(i) >= 256 Then
            lngSearchIP(i) = 0
            lngSearchIP(i + 1) = lngSearchIP(i + 1) + 1
        End If
    Next i
    refreshIP = Format(lngSearchIP(4), "0") & "." & Format(lngSearchIP(3), "0") & "." & Format(lngSearchIP(2), "0") & "." & Format(lngSearchIP(1), "0")
    strNowIP = refreshIP
    Debug.Print refreshIP
End Function

以下代码请新建一个模块后 COPY 进去
Option Compare Database
Public lngSearchIP(4) As Long
Public strNowIP As String
Public strOKAddress As String
Public strOKIP As String
Public blnStop As Boolean
Function writeOKIP()
    Dim rs As New ADODB.Recordset
    Dim strSql As String
    
    strSql = "select * from ipaddress order by enip"
    rs.Open strSql, CurrentProject.Connection, 1, 1
    
    Dim strAdd1 As String
    Dim strIP1 As String
    Dim lngENIP1 As Long
    Dim strState As String
    strState = "start"
    
    Dim i As Long
    Dim iA As Long
    iA = rs.RecordCount
    
    Do Until rs.EOF
        If blnStop = True Then Exit Function
        If strAdd1 <> rs("add") Then
            strSql = "update ipaddress_ok set ip2='" & strIP1 & " ',enip2=" & Str(lngENIP1) & ",mark='' where mark='setting'"
            CurrentProject.Connection.Execute strSql
            DoEvents
            strSql = "insert into ipaddress_ok (ip1,enip1,[mark],[add]) values('" & rs("ip1") & "'," & Str(rs("enip")) & ",'setting','" & rs("add") & "')"
            CurrentProject.Connection.Execute strSql
            DoEvents
        End If
            
        strAdd1 = rs("add")
        strIP1 = rs("ip1")
        lngENIP1 = rs("enip")
        i = i + 1
        Form_控制.Label4.Caption = Str(Int(i / iA * 10000) / 100) & "%"
        rs.MoveNext
    Loop
    rs.Close
    
    strSql = "update ipaddress_ok set ip2=mid(ip2,1,len(ip2)-2) & '255'"
    CurrentProject.Connection.Execute strSql
    strSql = "update ipaddress_ok set enip1=enaddr(ip1)"
    CurrentProject.Connection.Execute strSql
    strSql = "update ipaddress_ok set enip2=enaddr(ip2)"
    CurrentProject.Connection.Execute strSql
End Function

Function enaddr(Sip As String) As Double
    '用代理无法连接的问题还要解决
    '将字符的 IP 编码为长整的 IP
    On Error Resume Next
    Dim str1 As String
    Dim str2 As String
    Dim str3 As String
    Dim str4 As String
    Sip = CStr(Sip)
    str1 = Left(Sip, CInt(InStr(Sip, ".") - 1))
    Sip = Mid(Sip, CInt(InStr(Sip, ".")) + 1)
    str2 = Left(Sip, CInt(InStr(Sip, ".")) - 1)
    Sip = Mid(Sip, CInt(InStr(Sip, ".")) + 1)
    str3 = Left(Sip, CInt(InStr(Sip, ".")) - 1)
    str4 = Mid(Sip, CInt(InStr(Sip, ".")) + 1)
    enaddr = CLng(str1) * 256 * 256 * 256 + CLng(str2) * 256 * 256 + CLng(str3) * 256 + CLng(str4) - 1
End Function

Function deaddr(Sip)
    '将编码为长整的 IP 重现转换为字符型的 IP
    Dim s1, s21, s2, s31, s3, s4
    Sip = Sip + 1
    s1 = Int(Sip / 256 / 256 / 256)
    s21 = s1 * 256 * 256 * 256
    s2 = Int((Sip - s21) / 256 / 256)
    s31 = s2 * 256 * 256 + s21
    s3 = Int((Sip - s31) / 256)
    s4 = Sip - s3 * 256 - s31
    deaddr = CStr(s1) + "." + CStr(s2) + "." + CStr(s3) + "." + CStr(s4)
End Function

示例请参考:http://access911.net/down/eg/User_DHTML_search_IP.rar

上述程序会自动去 http://ip.loveroot.com/index.php?job=search 搜索所有的 IP 以及对应的物理地址并保存到数据库中

修订:刚才上了一下网站,发现界面竟然改了,又重新修改了一下读取页面的程序。

关于 WebBrowser 控件的资料请参考 VB6 中 MSDN 的以下章节 
Internet Client SDK 
Internet Tools & Technologies
Reusing the WebBrowser and MSHTML

inet401/help/itt/ieprog/IEProg.htm#book_browsing(BOOKMARK)

 

http://access911.net 站长收藏

时间: 2024-09-22 09:12:15

用 Access 分析网站一例的相关文章

有理有据分析网站SEO优化十大误区(上篇)

在互联网上,大家要是搜索这个标题,可能会觉得并不新鲜.关于网站SEO优化问题的探讨在诸多站长中一直没有停过,尤其是新网站做网站优化进行网站分析的时候,很容易陷入优化误区.废话不多说,进入今天的主题. 第一个误区:网站定位不明确,模糊优化 你建立的网站,目的是什么?你的网站服务人群或者说用户是哪些群体?网站内容是否有针对性的进行了整合和思考?你考虑了你的网站用户吗?   很显然,我们需要反思了.我最近自己也在考虑这个问题,很多站长都是网站做着做着就偏离了自己的主题了.我以如下网站为例:   这个网

基于用户细分的比较分析来分析网站

细分是用于比较的,比较是为了反映差异进而做出调整优化的,所以细分的目的最终还是指导运营决策,这个才是数据分析的价值体现.从网站的用户层面,我们根据用户访问的行为特征将用户细分成各种类型,因为用户行为各异,行为统计指标各异,分析的角度各异,所以如果要对用户做细分,可以从很多角度根据各种规则实现各种不同的分类,看到过有些数据分析报告做了各种用户的细分,各种用户行为的分析,再结合其他各种维度,看上去内容绝对足够丰富,但很难理解这些分析结果到底是为了说明什么问题,也许作为一个咨询报告反映当前整体的趋势和

以国内外知名网站为例 关于网站分页导航的一些思考

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 [核心提示] 关于分页导航,看似简单的设计背后有一些什么样的逻辑? 编辑注记: 这篇文章是我们的读者Weiyangliang对网站分页导航设计的一些思考,分析了网站分页导航设计上的一些想法和思路. 在浏览网页时,经常会遇到分页导航的情况.分页导航主要有四个作用:告诉用户要浏览的信息量;让用户快速跳过一些不想看的信息;便于定位和查找;减少页面大

搜索引擎排名算法根据什么来分析网站内容相关度高低

摘要: 网站内容相关度是什么?如何提高网站内容相关度?有那些技巧能够提升网站整体内容相关度?这是这篇文章特别关注的,好了废话不多说,先来搞清楚什么是网站内容相关度. 网站内 网站内容相关度是什么?如何提高网站内容相关度?有那些技巧能够提升网站整体内容相关度?这是这篇文章特别关注的,好了废话不多说,先来搞清楚什么是网站内容相关度. 网站内容相关度是什么? 网站内容相关度通俗的讲:"网站是否集中讨论某一个话题".比方说我的站,我就集中讨论了一个话题"seo".搜索引擎排

实战产品站推广(四):怎么分析网站竞争对手

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 在我们决定做网站来推广自己的产品时,第一步就是要分析值不值的去做,分析针对产品的那些关键词容易做,花一点时间去调查及研究,会对你以后产品站推广有很大的影响.爱煮饭今天详细为你讲解怎么分析网站竞争对手. 第一步确定网站目标关键词,然后在搜索中输入关键词看排名前十的网站,例如"天之星点读机"这个产品目标关键词是"点读

谈SEO如何分析网站竞价施力方向及推广计划小因素设置

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 面对高难度的自然优化,竞价已经成为了很多行业领域中SEO优化的最重要一环.但是,要想把竞价做好,获得最终利益却不是那么容易的事情,跟大家分享一个之前不知道在那个平台上看到的,分析网站竞价施力方向的几点注意事项:这几点在我看来十分的受用,工作两年,一直按着这个思路走,竞价效果还不错,今天贴出来供大家参考一下: 一.SEO如何分析网站竞价施力方向

如何利用百度管理员工具简单分析网站近期优化数据

众所周知,网站优化过程中数据分析是必不可少的日常工作,尤其对于一个新手朋友而言,笔者建议最好去百度站长平台申请下百度站长工具,一般就是提交申请的网站,下载验证码到ftp用域名访问这个验证码文件即可验证成功,新申请的网站数据信息,一般数据需经过一天之后才会显示在百度网站管理员工具的后台,今天笔者以自己蓝田玉网站为例子进行分析下如何用百度管理员工具分析我们网站优化数据.   第一,分析网站的百度索引量.首先笔者第一张图放的是近一周百度对于自身网站索引量的分析,上周笔者通过观其站长工具查到自己网站收录

通过分析网站日志 了解搜索引擎变化

作为一名站长不但要懂得如何写原创,如何发外链,还要学会分析网站的日志.站长会分析网站的日志,就能了解你的网站在搜索引擎中是否比较重要.通过网站日志你能得到哪些重要的信息,下面来详细说明下: 一.看网站的抓取情况 1.新站刚上线,看看搜索引擎有没有来你网站抓取了; 2.网站收录异常,或者被k,通过日志可以了解搜索引擎是否还有来光顾你的网站; 3.对于网站的问题进行解决,必须要读懂日志; 二.怎么查找网站日志? 一般在FTP一个名为logs的文件夹,不同的服务器可能日志文件命名不一样,不过一定会包含

分析网站潜力 建立用户关系

在这个经济快速发展的时代,人们考虑事物都喜欢.或者说习惯性去分析其是否有潜力,是否有开始或者继续的必要.潜力是内在的还未发挥出来的优势或力量,也就是说,有潜力的事物能够在日后的发展中更加具有优势和竞争力.网站潜力也不不例外.下面我就从三个点来分析网站潜力,以此作为一个参考,和大家互相交流下. 1.何为网站潜力呢?很多人认为网站的潜力等同于它的搜索引擎排名.经过实践的检验,事实证明,建立网站的用户关系,形成网站的用户关系链才是网站潜力的具体表现.人是需要交流的生物.用户之间相互交流,产生基于交易.