ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 使用XMLHTTP和数组采集网页数据

使用XMLHTTP和数组采集网页数据

作者:绿色风 分类: 时间:2022-08-18 浏览:64
楼主
xmyjk
Q:提取网页上下部分两段信息,并提取填入EXCEL两个表中,第一个填入整理后的船务信息,第二个表返回表格数据。如下图
网页:

 
表一:

 
表二:

 

A:使用XMLHTTP采集网页数据,并利用数组算法整理数据,最后写入单元格,并按楼主要求对采集不到的进行判断,并把采集数据的网址做成超链接。
  1.     Option Explicit
  2.     Sub test()
  3.     Dim tm() As String, tmp1() As String, tmp2() As String, i As Integer, arr1(0, 4) As String, arr2(0, 1) As String, xmlhttp As Object, P As Long
  4.     Dim li1() As String, li2() As String, arr3() As String, n As Long, blno As String, brr() As String, crr() As String, nm As Long
  5.     Dim url As String

  6.     On Error Resume Next
  7.     nm = [d65536].End(3).Row + 1
  8.     Range(Cells(2, 4), Cells(nm, 11)).ClearContents
  9.     Worksheets(2).UsedRange.Offset(1).Clear

  10.     Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
  11.     For P = 2 To [c65536].End(3).Row
  12.          
  13.        blno = Trim(Cells(P, 3).Value)
  14.        n = Worksheets(2).[a65536].End(3).Row + 1
  15.        url = "http://edi.easipass.com/dataportal/query.do?ctno=&blno=" & blno & "&qn=dp_cst_vsl"
  16.        With xmlhttp
  17.           .Open "get", url, False
  18.           .send
  19.           If InStr(.responsetext, "查不到您所需要的电子装箱单") Then
  20.             Cells(P, 4) = "查不到您所需要的电子装箱单"
  21.             Worksheets(2).Cells(n, 1) = blno
  22.             Worksheets(2).Cells(n, 2) = "查不到您所需要的电子装箱单"
  23.             GoTo line1
  24.           Else
  25.             tm = Split(.responsetext, "</td>")
  26.             tmp1 = Filter(tm, "<td align=""left"">")
  27.             tmp2 = Filter(tm, "<td align=""left"" bgcolor=")
  28.           End If
  29.         End With
  30.       
  31.         For i = 0 To UBound(tmp1)
  32.            li1() = Split(tmp1(i), ">")
  33.            arr1(0, i Mod 5) = li1(UBound(li1))
  34.         Next
  35.       
  36.         ReDim arr3(UBound(tmp2) \ 8, 8)
  37.         ReDim brr(UBound(arr3))
  38.         ReDim crr(UBound(arr3))
  39.         For i = 0 To UBound(tmp2)
  40.             li2() = Split(tmp2(i), ">")
  41.             arr3(i \ 8, i Mod 8 + 1) = li2(UBound(li2))
  42.             arr3(i \ 8, 0) = blno
  43.             If i Mod 8 = 3 Then brr(i \ 8) = Int(i \ 8) + 1 & "." & li2(UBound(li2))
  44.             If i Mod 8 = 4 Then crr(i \ 8) = Int(i \ 8) + 1 & "." & li2(UBound(li2))
  45.         Next
  46.         Worksheets(2).Cells(n, 1).Resize(UBound(arr3, 1) + 1, UBound(arr3, 2) + 1) = arr3
  47.             
  48.         arr2(0, 0) = Join(brr, vbCrLf)
  49.         arr2(0, 1) = Join(crr, vbCrLf)
  50.       
  51.         Cells(P, 4).Resize(1, UBound(arr1, 2) + 1) = arr1
  52.         Cells(P, 9).Resize(1, UBound(arr2, 2) + 1) = arr2
  53.         ActiveSheet.Hyperlinks.Add anchor:=Cells(P, 11), Address:=url, TextToDisplay:="相关链接"
  54.       
  55.         Erase tmp1, tmp2, tm, li1, li2, brr, crr
  56.         Erase arr1, arr2, arr3
  57.       
  58.     line1:
  59.     Next
  60.     Set xmlhttp = Nothing

  61.     [C:J].Columns.AutoFit
  62.     MsgBox "Ok"
  63.     End Sub

fthwps电子装箱单查询.rar
2楼
mjc2csm
只是打酱油,当我不存在

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap