VBAとネットワークキャプチャ

3494 ワード

情報時代が到来したが、ネット資源をどのように活用すればいいのだろうか.
爬虫類ならPythonが優先ですが、仕方なく、私のような非専門プログラミングのエンジニアにとって、学習コストは確かに問題です.幸いなことに、VBは当時マイクロソフトの主推で、サポートされているライブラリは最新の最先端ではありませんが、少なくともまだ使用されています.効率を抜きにして、VBに恥じないのは工事人員の第一選択である.
まず、ネットワークキャプチャについて2つのツールを理解する必要があります.
一つはブラウザのF 12から呼び出された開発者ツールです.もう一つは有名なFiddlerです.この2つのツールは、Webページを分析するために使用されます.
もちろん、HTMLについての知識も少なくはありません.
以下を参照してください.http://www.w3school.com.cn/html/index.asp
VBAネットワークでよく使われる方法は次のとおりです.
1、xmlhttp/winhttp法:xmlhttp/winhttpシミュレーションでサーバに要求を送信し、サーバから返されたデータを受信する.利点:効率が高く、互換性の問題はほとんどありません.欠点:fiddlerのようなツールを使用してhttpリクエストをシミュレートする必要があります.2、IE/webbrowser法:IEコントロールまたはwebbrowserコントロールを作成し、htmlファイルオブジェクトの方法と属性を結合し、ブラウザ操作をシミュレートし、ブラウザページのデータを取得する.利点:この方法はほとんどのブラウザ操作をシミュレートすることができます.ご覧になれば、ブラウザで見えるデータをコードで取得できます.欠点:各弾窓はかなり煩わしく、互換性も確かに頭を悩ませる問題だ.アップロードファイルはIEでは実現できません.3、QueryTable法:excelが持参しているので、無理も一つの方法です.実はこの方法はxmlhttpと似ていて、GETやPOST方式で要求を送信して、サーバーのresponseを得てセル内に戻ります.利点:excelは持参しており、マクロを録画することでコードを得ることができ、tableを処理するのに便利です.コードは短く、ソースコードのtableに存在するデータを迅速に取得するのに適しています.欠点:referなどのパケットヘッダの引数をシミュレートできません:http://club.excelhome.net/thread-1159783-1-1.html
直接コード:
xmlhttp法の場合
Public Function XmlHttpData(LinkString As String) As String

Dim xmlHttp As Object
Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
xmlHttp.Open "GET", LinkString, False
xmlHttp.send

Do While xmlHttp.readystate <> 4
    DoEvents
Loop

XmlHttpData = xmlHttp.ResponseText
End Function

文字化けしの処理:
XmlHttpData = StrConv(xmlHttp.ResponseText, vbUnicode)

最後に、返されたデータを分析します.
tableの処理:splitおよびreplace分析を使用するか、正規表現で分析できます.またhtml法ではtableデータをhtmldocumentオブジェクトに書き込み、テーブルの各要素をループして取り出します.
Sub Main()
Dim strText As String
Dim arrData(1 To 1000, 1 To 3)
Dim i As Long, j As Long
Dim TR As Object, TD As Object

With CreateObject("MSXML2.XMLHTTP")
    .Open "POST", "http://www.pinble.com/Template/WebService1.asmx/Present3DList", False
    .setRequestHeader "Content-Type", "application/json"
    .Send "{pageindex:'1',lottory:'TC7XCData_jiangS',pl3:'',name:'     ',isgp: '0'}"
    strText = Split(JSEval(.responsetext), "

QueryTable
    Sub Main()
    Cells.Delete
    With ActiveSheet.QueryTables.Add("url;http://data.bank.hexun.com/lccp/jrxp.aspx", Range("a1"))
        .WebFormatting = xlWebFormattingNone '     '
        .WebSelectionType = xlSpecifiedTables '  table  '
        .WebTables = "2" ' 2 table'
        .Refresh False
    End With
    End Sub

コピー り け:table の を セルにコピーし、データの のフォーマットを できます.
Sub Main()
Dim strText As String
With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "http://data.bank.hexun.com/lccp/jrxp.aspx", False
    .Send
    strText = .responsetext
End With
strText = "")(0) & "
" CopyToClipbox strText Cells.Clear Range("a1").Select ActiveSheet.Paste End Sub Sub CopyToClipbox(strText As String) ' ' With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText strText .PutInClipboard End With End Sub