怎么用VBA或网络爬虫程序抓取网站数据

怎么用VBA或网络爬虫程序抓取网站数据,第1张

VBA网抓常用方法

1、xmlhttp/winhttp法:

用xmlhttp/winhttp模拟向服务器发送请求,接收服务器返回的数据

优点:效率高,基本无兼容性问题。

缺点:需要借助如fiddler的工具来模拟http请求。

2、IE/webbrowser法:

创建IE控件或webbrowser控件,结合htmlfile对象的方法和属性,模拟浏览器 *** 作,获取浏览器页面的数据。

优点:这个方法可以模拟大部分的浏览器 *** 作。所见即所得,浏览器能看到的数据就能用代码获取。

缺点:各种d窗相当烦人,兼容性也确实是个很伤脑筋的问题。上传文件在IE里根本无法实现。

3、QueryTables法:

因为它是excel自带,所以勉强也算是一种方法。其实此法和xmlhttp类似,也是GET或POST方式发送请求,然后得到服务器的response返回到单元格内。

优点:excel自带,可以通过录制宏得到代码,处理table很方便

。代码简短,适合快速获取一些存在于源代码的table里的数据。

缺点:无法模拟referer等发包头

也可以利用采集工具进行采集网页端的数据,无需写代码。

用代码实现自动化,界面就是一个按钮,点一下就完成了工资表的计算,或者自动生成工资条等。

这就是 *** 作界面。

Private Sub CommandButton3_Click() '检查填充

 Dim skUArr(1 To 1000, 1 To 3)

 Dim skUGs As Integer

 Dim hH As Integer

 Dim zlHH As Integer

 Cells.Find(What:="Weight of box", After:=ActiveCell, LookIn:=xlFormulas _

      , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

      MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate

 zlHH = ActiveCell.Row '重量所在行号

 skmGs = 0

 hH = 5

 Do While Trim(Cells(hH, 1).Text) <>""

    skUGs = skUGs + 1

    skUArr(skUGs, 1) = Trim(Cells(hH, 1).Text)

    skUArr(skUGs, 2) = Trim(Cells(hH, 4).Text)

    skUArr(skUGs, 3) = Cells(hH, 10).Value

 

    hH = hH + 1

 Loop

 Dim fName As String

 Dim SBook As Workbook

 Call SelectFile(fName)

 Set SBook = Workbooks.Open(fName)

 Dim M_sku As String, M_fnSku As String, M_qty As Integer

 With SBook.Sheets(1)

    For I = 1 To skUGs

       M_sku = Trim(.Cells(5 + I - 1, 1).Text)

       M_fnSku = Trim(.Cells(5 + I - 1, 4).Text)

       M_qty = .Cells(5 + I - 1, 9).Value

       If skUArr(I, 1) <>M_sku Then

          MsgBox ("第" &I &"条记录的SKU不一致!")

          Exit Sub

       End If

       If skUArr(I, 2) <>M_fnSku Then

          MsgBox ("第" &I &"条记录的FNSKU不一致!")

          Exit Sub

       End If

       If skUArr(I, 3) <>M_qty Then

          MsgBox ("第" &I &"条记录的QTY不一致!")

          Exit Sub

       End If

     

    Next I

 End With

 Dim qtyArr() As Integer

 Dim boxGs As Integer

 Dim boxArr()

 With ThisWorkbook.Sheets(1)

    boxGs = .Cells(4, 200).End(xlToLeft).Column

    ReDim qtyArr(1 To skUGs, 1 To boxGs)

    ReDim boxArr(1 To 4, 1 To boxGs)

    '读取数量

    For I = 1 To skUGs

       For J = 1 To boxGs

          qtyArr(I, J) = .Cells(5 + I - 1, 12 + J - 1).Value

       Next J

    Next I

   '读取box

    For I = 1 To 4

       For J = 1 To boxGs

          boxArr(I, J) = .Cells(zlHH + I - 1, 12 + J - 1).Value

       Next J

    Next I

 End With

 '填充

 With SBook.Sheets(1)

    '.Cells(5, 12).Resize(skUGs, boxGs) = qtyArr

    '.Cells(zlHH, 12).Resize(4, boxGs) = boxArr

    For I = 1 To skUGs

       For J = 1 To boxGs

          If qtyArr(I, J) >0 Then

             .Cells(5 + I - 1, 12 + J - 1) = qtyArr(I, J)

          End If

       Next J

    Next I

    For I = 1 To 4

       For J = 1 To boxGs

          .Cells(zlHH + I - 1, 12 + J - 1) = boxArr(I, J)

       Next J

    Next I

 End With

 SBook.Save

 MsgBox ("检查结果OK,填充完成!")

End Sub

这是其中一个按钮的代码,供参考。

Sub 在有密码的工作表执行代码()

Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表

Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行

Sheets("1").Protect Password:=123 '重新用密码保护工作表

End Sub

Sub 解除全部工作表保护()

Dim n As Integer

 For n = 1 To Sheets.Count

      Sheets(n).Unprotect

  Next n

End Sub

就OK了。

补充:Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7927426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存