Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从表格中提取数据_Vba_Web Scraping - Fatal编程技术网

Vba 从表格中提取数据

Vba 从表格中提取数据,vba,web-scraping,Vba,Web Scraping,我需要一些帮助来下载位于以下位置的库存表: 我尝试使用下面的代码至少获取第一行,但inspector中的内容显示为: <a target=”_blank”href=”/equities/apple-computer-inc” title=Apple Inc”>Apple</a> 任何帮助都将不胜感激。看起来填充该表的实际数据是从JSON中提取的,该JSON来自页面上运行的另一个javascript或其他内容请求。 这可能会使使用json解析器解析响应变得更容易,但编写正

我需要一些帮助来下载位于以下位置的库存表:

我尝试使用下面的代码至少获取第一行,但inspector中的内容显示为:

<a target=”_blank”href=”/equities/apple-computer-inc” title=Apple Inc”>Apple</a>

任何帮助都将不胜感激。

看起来填充该表的实际数据是从JSON中提取的,该JSON来自页面上运行的另一个javascript或其他内容请求。 这可能会使使用json解析器解析响应变得更容易,但编写正确的请求以获取所需数据可能会比较困难。网站的所有者可能不希望你这样做,因此他们可能不会让这件事变得容易。

它看起来像是一个POST请求,包含一组参数,还发送了一个cookie。因此,基本上您需要通过在标头中添加所有正确的参数和正确的cookie来重新创建此POST请求。我会得到一个像fiddler(如上所示)这样的web调试程序来查看和查看正在发生的事情

我还想建议您检查一下该网站是否提供了API,但它看起来

编辑: 实际上,我只需复制站点上使用的请求,就可以获得包含所需数据的JSON:

 Sub getdata()
    Dim XMLReq As New MSXML2.XMLHTTP60
    
    XMLReq.Open "POST", "https://es.investing.com/stock-screener/Service/SearchStocks", False
    XMLReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    XMLReq.setRequestHeader "Accept", "application/json"
    XMLReq.setRequestHeader "X-Requested-With", "XMLHttpRequest"
    
    XMLReq.send "country%5B%5D=5&exchange%5B%5D=95&exchange%5B%5D=2&exchange%5B%5D=1&sector=5%2C12%2C3%2C8%2C9%2C1%2C7%2C6%2C2%2C11%2C4%2C10&industry=74%2C56%2C73%2C29%2C25%2C4%2C47%2C12%2C8%2C44%2C52%2C45%2C71%2C99%2C65%2C70%2C98%2C40%2C39%2C42%2C92%2C101%2C6%2C30%2C59%2C77%2C100%2C9%2C50%2C46%2C88%2C94%2C62%2C75%2C14%2C51%2C93%2C96%2C34%2C55%2C57%2C76%2C66%2C5%2C3%2C41%2C87%2C67%2C85%2C16%2C90%2C53%2C32%2C27%2C48%2C24%2C20%2C54%2C33%2C19%2C95%2C18%2C22%2C60%2C17%2C11%2C35%2C31%2C43%2C97%2C81%2C69%2C102%2C72%2C36%2C78%2C10%2C86%2C7%2C21%2C2%2C13%2C84%2C1%2C23%2C79%2C58%2C49%2C38%2C89%2C63%2C64%2C80%2C37%2C28%2C82%2C91%2C61%2C26%2C15%2C83%2C68&equityType=ORD%2CDRC%2CPreferred%2CUnit%2CClosedEnd%2CREIT%2CELKS%2COpenEnd%2CRight%2CParticipationShare%2CCapitalSecurity%2CPerpetualCapitalSecurity%2CGuaranteeCertificate%2CIGC%2CWarrant%2CSeniorNote%2CDebenture%2CETF%2CADR%2CETC%2CETN&eq_market_cap%5Bmin%5D=110630000&eq_market_cap%5Bmax%5D=1990000000000&pn=1&order%5Bcol%5D=eq_market_cap&order%5Bdir%5D=d"
    
    If XMLReq.Status <> 200 Then
        MsgBox "problem" & vbNewLine & XMLReq.Status & "- " & XMLReq.statusText
        Exit Sub
    End If
    
    Debug.Print XMLReq.responseText
    
End Sub
Sub-getdata()
Dim XMLReq作为新的MSXML2.XMLHTTP60
XMLReq.Open“POST”https://es.investing.com/stock-screener/Service/SearchStocks”“错
XMLReq.setRequestHeader“内容类型”、“应用程序/x-www-form-urlencoded”
XMLReq.setRequestHeader“接受”、“应用程序/json”
XMLReq.setRequestHeader“X-request-With”,“XMLHttpRequest”
XMLReq.send"5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%4%5%5%5%5%5%d%d=1)D D=1和部门=1)D=1和D=1%6%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%D D D D D D=D=D=D D=D=D=D D D=1)D=1)D D=1)D=1)D D=1)D=1)D=1)D D=1和D=1,1,D=1,D D=1,D=1,D=1,D=1,D=1,D=1,D=1,D=1,D=1,D=1,D=96%2C34%2C55%2C57%2C76%2C66%2C5%218%2%2%2%20%20%20%20%20%20%20%20%20%20%20%20%2%20%20%20%20%20%20%20%25%25%20%20%20%19%19%19%19%19%19%19%19%19%19%19%2%2%2%2%2%2%2%2%2%20%2%2%2%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20已结清%2CREIT%2CELKS%2开放式%2权利%2参与份额%2资本安全%2永久资本安全%2担保证书%2 IGC%2认股权证%2高级票据%2债券%2交易基金%2交易日%2交易日%2交易日%2交易日%2交易日%2交易日和交易日市场上限%5Bmin%5D=110630000和交易日上限%5Bmax%5D=1990000000000和pn=1和订单%5Bcol%5D=eq市场上限和订单%5Bdir%5D=d”
如果XMLReq.Status为200,则
MsgBox“问题”&vbNewLine&XMLReq.Status&“-”&XMLReq.statusText
出口接头
如果结束
Debug.Print XMLReq.responseText
端接头

因此,现在您只需要了解如何解析JSON响应。

很可能是一个动态网页,其中您想要的内容通过当前页面发出的xhr请求来自不同的url以更新内容。通常,这些内容可以通过浏览器中的开发工具或网络监控工具(如wireshark)查看。因为动态内容不会出现在您发出的初始请求中。您可以通过关闭浏览器中的javascript并重新加载内容来测试这一点。如果您想要的内容不在那里,您将获得与上面代码中看到的内容类似的内容。您好@garbb,它工作得非常好!非常感谢。确实是本页面的开发人员他们使用的JSON格式没有用我通常使用的JSonConverte()正确解析。
 Sub getdata()
    Dim XMLReq As New MSXML2.XMLHTTP60
    
    XMLReq.Open "POST", "https://es.investing.com/stock-screener/Service/SearchStocks", False
    XMLReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    XMLReq.setRequestHeader "Accept", "application/json"
    XMLReq.setRequestHeader "X-Requested-With", "XMLHttpRequest"
    
    XMLReq.send "country%5B%5D=5&exchange%5B%5D=95&exchange%5B%5D=2&exchange%5B%5D=1&sector=5%2C12%2C3%2C8%2C9%2C1%2C7%2C6%2C2%2C11%2C4%2C10&industry=74%2C56%2C73%2C29%2C25%2C4%2C47%2C12%2C8%2C44%2C52%2C45%2C71%2C99%2C65%2C70%2C98%2C40%2C39%2C42%2C92%2C101%2C6%2C30%2C59%2C77%2C100%2C9%2C50%2C46%2C88%2C94%2C62%2C75%2C14%2C51%2C93%2C96%2C34%2C55%2C57%2C76%2C66%2C5%2C3%2C41%2C87%2C67%2C85%2C16%2C90%2C53%2C32%2C27%2C48%2C24%2C20%2C54%2C33%2C19%2C95%2C18%2C22%2C60%2C17%2C11%2C35%2C31%2C43%2C97%2C81%2C69%2C102%2C72%2C36%2C78%2C10%2C86%2C7%2C21%2C2%2C13%2C84%2C1%2C23%2C79%2C58%2C49%2C38%2C89%2C63%2C64%2C80%2C37%2C28%2C82%2C91%2C61%2C26%2C15%2C83%2C68&equityType=ORD%2CDRC%2CPreferred%2CUnit%2CClosedEnd%2CREIT%2CELKS%2COpenEnd%2CRight%2CParticipationShare%2CCapitalSecurity%2CPerpetualCapitalSecurity%2CGuaranteeCertificate%2CIGC%2CWarrant%2CSeniorNote%2CDebenture%2CETF%2CADR%2CETC%2CETN&eq_market_cap%5Bmin%5D=110630000&eq_market_cap%5Bmax%5D=1990000000000&pn=1&order%5Bcol%5D=eq_market_cap&order%5Bdir%5D=d"
    
    If XMLReq.Status <> 200 Then
        MsgBox "problem" & vbNewLine & XMLReq.Status & "- " & XMLReq.statusText
        Exit Sub
    End If
    
    Debug.Print XMLReq.responseText
    
End Sub