VBA 和 IE8 - 抓取埋在 table 中的文本
VBA and IE8 - scrape text buried in table
来自美丽的 Tim Williams,但我又被卡住了。使用 ie8 查找抓取资源非常困难。
这是我现在的代码
Sub Scraper()
Dim item As Long
Dim price1 As String
Dim obj As Object
item = "10011" 'this will eventually be placed in a loop for multiple searches
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
'navigate and download the web page
objIE.Navigate "http://*********.aspx?UID=" & item & "~***"
Do While objIE.ReadyState <> 4 Or objIE.Busy
DoEvents
Loop
'keeping lines for reference, but increased speed by adding data to URL - do not need anymore
'objIE.Document.getElementsByTagName("input")(0).Value = item
'objIE.Document.getElementByID("FGC").Click
Set housePrice = objIE.Document.getElementByID("price_FGC")
End Sub
我正在尝试获取 HTML Table 中某件商品的价格。我找到了 table、"price_FGC" 的 ID,但实际价格嵌套在该 ID 中。我尝试使用 .innerText,但 ie8 不支持它,或者我做错了。这是元素树的屏幕截图:
我看过一些关于在某些行中添加 "children" 的例子,但没有真正的例子说明这种情况。我也知道 excel 可以获取 table 数据 "en masse," 但由于可用资源和可迭代性,我这样做是出于特定原因。
已解决:
感谢@Nathan_Sav 的帮助。发布给其他有类似问题且只能访问 IE8 的人。更正了变量名称,以便对我的同事更有意义 :D
Sub Scraper()
Dim item As Long
Dim priceStr As String
Dim priceTag As Object
Dim priceTable As Object
item = "10011" 'this will eventually be placed in a loop for multiple searches
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
' navigate and download the web page
objIE.Navigate "http://******.aspx?UID=" & item & "~***"
Do While objIE.ReadyState <> 4 Or objIE.Busy
DoEvents
Loop
'objIE.Document.getElementsByTagName("input")(0).Value = item
'objIE.Document.getElementByID("FDI").Click
Set priceTable = objIE.Document.getElementByID("price_FGC")
Set priceTag = priceTable.getElementsByTagName("u")(3)
priceStr = priceTag.innerText
Sheet1.Range("A1").Value = priceStr
objIE.Quit
End Sub
已添加为答案:
houseprice.getelementsbytagname("td") 或者 "u"
@Nathan_Sav,谢谢大佬!我设置了一个等于 getElementsByTagName("u") 的新对象,并使用 VBA 中的 Locals window 找到正确的项目编号。我将用成品编辑我的 post。
这是我现在的代码
Sub Scraper()
Dim item As Long
Dim price1 As String
Dim obj As Object
item = "10011" 'this will eventually be placed in a loop for multiple searches
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
'navigate and download the web page
objIE.Navigate "http://*********.aspx?UID=" & item & "~***"
Do While objIE.ReadyState <> 4 Or objIE.Busy
DoEvents
Loop
'keeping lines for reference, but increased speed by adding data to URL - do not need anymore
'objIE.Document.getElementsByTagName("input")(0).Value = item
'objIE.Document.getElementByID("FGC").Click
Set housePrice = objIE.Document.getElementByID("price_FGC")
End Sub
我正在尝试获取 HTML Table 中某件商品的价格。我找到了 table、"price_FGC" 的 ID,但实际价格嵌套在该 ID 中。我尝试使用 .innerText,但 ie8 不支持它,或者我做错了。这是元素树的屏幕截图:
我看过一些关于在某些行中添加 "children" 的例子,但没有真正的例子说明这种情况。我也知道 excel 可以获取 table 数据 "en masse," 但由于可用资源和可迭代性,我这样做是出于特定原因。
已解决: 感谢@Nathan_Sav 的帮助。发布给其他有类似问题且只能访问 IE8 的人。更正了变量名称,以便对我的同事更有意义 :D
Sub Scraper()
Dim item As Long
Dim priceStr As String
Dim priceTag As Object
Dim priceTable As Object
item = "10011" 'this will eventually be placed in a loop for multiple searches
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
' navigate and download the web page
objIE.Navigate "http://******.aspx?UID=" & item & "~***"
Do While objIE.ReadyState <> 4 Or objIE.Busy
DoEvents
Loop
'objIE.Document.getElementsByTagName("input")(0).Value = item
'objIE.Document.getElementByID("FDI").Click
Set priceTable = objIE.Document.getElementByID("price_FGC")
Set priceTag = priceTable.getElementsByTagName("u")(3)
priceStr = priceTag.innerText
Sheet1.Range("A1").Value = priceStr
objIE.Quit
End Sub
已添加为答案:
houseprice.getelementsbytagname("td") 或者 "u"
@Nathan_Sav,谢谢大佬!我设置了一个等于 getElementsByTagName("u") 的新对象,并使用 VBA 中的 Locals window 找到正确的项目编号。我将用成品编辑我的 post。