學(xué)網(wǎng)抓對vba的要求:
1,、了解對象及對象屬性方法的基本概念,; 2、熟練使用循環(huán),、判斷及vba數(shù)組,; 3、掌握一種以上提取文本的方法,,可以在各種有規(guī)律的文本里提取所需數(shù)據(jù),; 4、會調(diào)試代碼,,會用立即窗口,、本地窗口。(很重要,,請務(wù)必學(xué)會)
5,、有錄制宏的經(jīng)驗。 可以這樣說,只要你具備上述vba知識,,再對網(wǎng)抓有點興趣,,有點耐心,那你就能學(xué)會網(wǎng)抓,。 我本人開始用xmlhttp和fiddler的時候,,對html和javascript是一竅不通的,對get,、post也不懂,,全是依樣畫葫蘆。畫成功后,,有了興趣,才慢慢去尋找它的原理和相關(guān)知識去學(xué)習(xí),。我想我這樣的學(xué)習(xí)方法或許可以給一些像我一樣的小白一個借鑒,。但愿沒有誤導(dǎo)新人才好。 學(xué)習(xí)html強力推薦此網(wǎng)站:http://www.w3school.com.cn/ ,絕對權(quán)威
================================================== 如果發(fā)覺樓主有寫錯的地方,,或是用錯術(shù)語,,或是概念模糊,或是運行出錯,、運行效果與樓主不同,,或是有看不懂、不理解的地方,,請大家及時提出來,。 希望在大家的幫助和建議下完善本帖,讓不會網(wǎng)抓的朋友由此貼學(xué)會寫一些基礎(chǔ)的網(wǎng)抓代碼,,同時感受到網(wǎng)抓的樂趣,。謝謝大家!補充內(nèi)容 (2014-11-5 19:37):交流QQ群:310731499 分享到新浪微博 本帖最后由 wcymiss 于 2014-10-27 13:07 編輯 處理tabletable數(shù)據(jù)處理,,除了之前的兩種通用方法外,,還有以下幾種方法: 1、html法 將table數(shù)據(jù)寫入htmldocument對象,,然后循環(huán)取出表格的各個元素,。 優(yōu)點:可以利用htmldocument對象整理表格。 缺點:需要學(xué)習(xí)html相關(guān)知識,。 以 17樓作業(yè)二為例: - 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./Template/WebService1.asmx/Present3DList', False
- .setRequestHeader 'Content-Type', 'application/json'
- .Send '{pageindex:'1',lottory:'TC7XCData_jiangS',pl3:'',name:'江蘇七星彩',isgp: '0'}'
- strText = Split(JSEval(.responsetext), '<script')(0) '本例的script運行會提示錯誤,,所以去除這部分script代碼
- End With
-
- With CreateObject('htmlfile')
- .write strText
- i = 0
- For Each TR In .all.tags('table')(2).Rows
- i = i + 1
- j = 0
- For Each TD In TR.Cells
- j = j + 1
- arrData(i, j) = TD.innerText
- Next
- Next
- End With
-
- Set TR = Nothing
- Set TD = Nothing
- Cells.Clear
- Range('C:C').NumberFormat = '@' '設(shè)置文本格式以顯示數(shù)字前面的0
- Range('a1').Resize(i, 3).Value = arrData
- End Sub
- Function JSEval(s As String) As String
- With CreateObject('MSScriptControl.ScriptControl')
- .Language = 'javascript'
- JSEval = .Eval(s)
- End With
- End Function
2、QueryTable法: 這個是excel自帶的網(wǎng)抓利器,。個人覺得它最大的優(yōu)勢就是處理table很方便,。 優(yōu)點:處理table方便,代碼簡短,。 缺點:會產(chǎn)生定義名稱,。多頁循環(huán)時每頁都會產(chǎn)生行字段名稱,,需要后續(xù)處理刪除。 仍以 作業(yè)一的第1題為例: - 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
代碼相當(dāng)簡短,。 3,、復(fù)制粘貼法: table部分的文字可以直接復(fù)制到單元格內(nèi),且保留數(shù)據(jù)原格式,。 優(yōu)點:只需取出table部分,,不需分析數(shù)據(jù)內(nèi)部結(jié)構(gòu)。代碼編寫簡便,。 缺點:有時格式反而是累贅,。 - 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 = '<table' & Split(Split(strText, '<table')(2), '</table>')(0) & '</table>'
- 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
|