Excel VBA-使用动态内容的XMLHTTP请求刮取货物编号跟踪状态
我对使用VBA进行web抓取还不熟悉,并询问了一些关于从SO社区抓取所需值的回复 我必须创建几个功能,从每个不同的网站获取所提供货物编号的状态 下面是一位用户帮助我的代码。但是,我不熟悉正则表达式和VBA的替换方法。我正试图简化这段代码,以便我也可以将其复制到其他网站。我知道每个网站都需要一个唯一的代码,但如果基础保持不变,我可以修改需要删除的确切元素,这将是理想的 这是我目前拥有的代码Excel VBA-使用动态内容的XMLHTTP请求刮取货物编号跟踪状态,excel,vba,web-scraping,Excel,Vba,Web Scraping,我对使用VBA进行web抓取还不熟悉,并询问了一些关于从SO社区抓取所需值的回复 我必须创建几个功能,从每个不同的网站获取所提供货物编号的状态 下面是一位用户帮助我的代码。但是,我不熟悉正则表达式和VBA的替换方法。我正试图简化这段代码,以便我也可以将其复制到其他网站。我知道每个网站都需要一个唯一的代码,但如果基础保持不变,我可以修改需要删除的确切元素,这将是理想的 这是我目前拥有的代码 Function FlightStat_AF(cargoNo As Variant) As String
Function FlightStat_AF(cargoNo As Variant) As String
Const url = "https://www.afklcargo.com/mycargo/api/shipment/detail/057-"
Dim elem As Object
Dim Result As String
Dim askFor As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url & cargoNo, False
.send
Result = .responseText
If .Status = 200 Then
If InStr(1, Result, "faultDescription") = 0 Then
askFor = """metaStatus"""
Else
askFor = """faultDescription"""
End If
With CreateObject("VBScript.RegExp")
.Global = True
.MultiLine = True
.Pattern = askFor & ":(.*?),"
Set elem = .Execute(Result)
End With
Result = Replace(elem(0).SubMatches(0), Chr(34), "")
Else
Result = "No cargoID"
End If
End With
FlightStat_AF = Result
End Function
现在我正在尝试为下面的网站创建一个类似的功能
URL=
样本货物编号=60848034
要刮取的图元在所附的中以黄色高亮显示
有人能帮我以一种更简单的方式复制Zwenn提供的上述代码,以便我可以将其用作我需要搜索的其他网站的参考。以下内容应为您提供所需的状态,只要它可用
Sub PrintStatus()
MsgBox GetDeliveryStat("60848034")
End Sub
Function GetDeliveryStat(cargoNo As Variant) As String
Const Url = "https://booking.unitedcargo.com/skychain/app?service=page/nwp:Trackshipmt&doc_typ=AWB&awb_pre=016&awb_no="
Dim dStatCheck$, deliveryStat$, S$
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", Url & cargoNo, False
.send
S = .responseText
End With
With CreateObject("HTMLFile")
.write S
On Error Resume Next
dStatCheck = .getElementById("trackShiptablerowInner0").getElementsByTagName("b")(0).innerText
On Error GoTo 0
If dStatCheck <> "" Then
deliveryStat = dStatCheck
Else
deliveryStat = "Not Found"
End If
End With
GetDeliveryStat = deliveryStat
End Function
子打印状态()
MsgBox GetDeliveryStat(“60848034”)
端接头
函数GetDeliveryStat(cargoNo作为变量)作为字符串
常量Url=”https://booking.unitedcargo.com/skychain/app?service=page/nwp:Trackshipmt&doc_typ=AWB&awb_pre=016&awb_no="
Dim dStatCheck$,deliveryStat$,S$
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”,Url和cargoNo,False
.发送
S=.responseText
以
使用CreateObject(“HTMLFile”)
.写S
出错时继续下一步
dStatCheck=.getElementById(“trackShiptablerowInner0”).getElementsByTagName(“b”)(0).innerText
错误转到0
如果是dStatCheck“”,则
deliveryStat=dStatCheck
其他的
deliveryStat=“未找到”
如果结束
以
GetDeliveryStat=deliveryStat
端函数
该已交付
状态的位置是否始终在该特定行中,或者可能在表中的任何位置?你能再分享一个卡哥特诺吗?@SIM,是的。它将位于该特定行中。基本上这是第一排。我想刮去牢房里的东西。更多货物编号为10205436、60848034、12345678、60848045如果您在循环中运行此函数,最好修改函数以将xhr和htmldocument变量作为参数传递,而不是重复创建和销毁。另外,如果作为字符串传递,则在函数签名中声明为字符串,并传递ByVal。谢谢@Sim。代码工作得很好。我将尝试为3或4个其他网站复制此代码。但我可能需要一些帮助,以防我无法获得任何网站的正确代码。