Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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从具有重复span id的HTML中删除特定span id_Html_Vba_Web Scraping_Duplicates - Fatal编程技术网

通过VBA从具有重复span id的HTML中删除特定span id

通过VBA从具有重复span id的HTML中删除特定span id,html,vba,web-scraping,duplicates,Html,Vba,Web Scraping,Duplicates,我不熟悉html抓取,但熟悉VBA 我正试图从获取价格信息 包含信息的html代码是span id“pric” 16341 TLvar originalmoneyorderprice 7484=16341; 但是,有几个span id=“pric”为0。因此,下面的代码为0。如何获取值“16341” Sub-getprice2() 将ws设置为工作表:设置ws=ThisWorkbook.Worksheets(“Sheet1”) 将文本变暗为字符串 最后一排一样长 将sht变暗为工作表 设置

我不熟悉html抓取,但熟悉VBA

我正试图从
获取价格信息

包含信息的html代码是span id“pric”


16341 TLvar originalmoneyorderprice 7484=16341;
但是,有几个span id=“pric”为0。因此,下面的代码为0。如何获取值“16341”

Sub-getprice2()
将ws设置为工作表:设置ws=ThisWorkbook.Worksheets(“Sheet1”)
将文本变暗为字符串
最后一排一样长
将sht变暗为工作表
设置sht=ActiveSheet
lastrow=sht.Cells(sht.Rows.Count,“A”).End(xlUp).Row
对于i=2到最后一行
使用CreateObject(“internetexplorer.application”)
.导航“https://shop.zuhalmuzik.com/index.php?p=search&search=单元格(i,1).值(&C)
执行While.Busy和.ReadyState 4:DoEvents:Loop
睡500
text=.Document.getElementById(“pric”).innerText
退出
以
ws.Cells(i,2).Value=text
接下来我
端接头

好的,试一试下面的内容。确保在执行之前将
Microsoft HTML对象库
添加到参考库中

Sub fetchPrice()
    Const Url$ = "https://shop.zuhalmuzik.com/index.php?p=search&search=FA-08"
    Dim Html As New HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
        .send
        Html.body.innerHTML = .responseText
        [A1] = Html.querySelector("span[id*='divmoneyorderprice'] > span[id='pric']").innerText
    End With
End Sub

您用来定位价格的id没有任何错误。问题是该网站不喜欢机器人,因此它会将你的脚本屏蔽一个小时左右。试着在一小时后再次运行它,你应该会得到结果。顺便说一句,你可以用xhr代替IE,因为你感兴趣的内容是静态的。你好,谢谢你的评论。我有点不同意,因为还有两个span id=“pric”的值为0。最有可能的是,代码获得了它遇到的第一个值。我试图用(3)为它编制索引,但没有成功。另外,我在一个小时后试过了,没什么变化。是的,如果你说的是检查元素时可见的元素。然而,在使用xmlhttp请求进行测试时,我引用了页面源代码。谢谢。我明白了,一小时后再做一次不会改变结果。你还有什么其他的建议来获取信息吗?它适用于链接!谢谢。但是,当我使用URL变量获取多个价格时,它仍然为零。当URL可变时,如何获取价格?提前谢谢我投了赞成票。这并不能完全解决问题,但肯定是一个良好的开端。有没有办法克服网站设置的障碍?提前谢谢。是的,我查过了。第一个已报废,其余为0。关于如何开始学习代理有什么建议吗?好的,你的问题似乎已经解决了。查看编辑。是选择器导致了@hakandeep的问题。谢谢。非常感谢@SIM!它的工作没有任何超时所需的代码!
Sub fetchPrice()
    Const Url$ = "https://shop.zuhalmuzik.com/index.php?p=search&search=FA-08"
    Dim Html As New HTMLDocument

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
        .send
        Html.body.innerHTML = .responseText
        [A1] = Html.querySelector("span[id*='divmoneyorderprice'] > span[id='pric']").innerText
    End With
End Sub