通过VBA从具有重复span id的HTML中删除特定span id
我不熟悉html抓取,但熟悉VBA 我正试图从通过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代码是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