在日常任务中,我目前必须搜索大量产品并收集有关这些产品的信息。因此,我的想法是在Google上搜索产品,并从产品标题部分提取数据,然后从第一个搜索结果中获取信息,然后对许多产品进行此循环。
这是到目前为止我的代码:
Sub SkuAutomation()
Dim ie As Object
'Navigates to google
Set ie = CreateObject("InternetExplorer.application")
ie.Visible = True
ie.Navigate "https://google.co.uk/search?q=" & Worksheets("sheet1").Cell(9, 4).Value & " " & Worksheets("sheet1").Cells(9, 2)
'Waits for page to load before next action
Do While ie.ReadyState <> READYSTATE_COMPLETE
Loop
End Sub
我只想添加一段代码,要么单击google返回的第一个链接,要么为我返回链接。然后,我的想法是从该页面的产品标题部分抓取数据!虽然还很早期。
我只是一个初学者,因此非常感谢任何帮助!提前谢谢了。
答案 0 :(得分:2)
您的里程可能会有所不同,但是对于您提供的内容,您可以使用CSS选择器组合来按页面样式定位第一个链接。
我使用#search div.r [href*=http]
,但您可以简化为#search .r a
。我很想知道http
中有一个href
。
#
是一个id选择器,空格" "
是一个后代选择器(选择前一个元素的子代,而[]
是一个属性选择器。{{1} }是一个类选择器,即按类名称选择一个元素。
我正在寻找具有"."
属性且其值包含href
且其父元素http
元素的类名称为div
的第一个元素,其父元素具有ID r
。
search
答案 1 :(得分:0)
这就是我要做的。在“单元格A2”中放置一些搜索条件,在“ ColumnA”中一直向下移动。然后运行下面的代码。结果将进入ColumnB中的相邻单元格
girafe
rhino
starbucks
Sub Gethits()
Dim url As String, lastRow As Long
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Dim cookie As String
Dim result_cookie As String
start_time = Time
Debug.Print "start_time:" & start_time
For i = 2 To lastRow
url = "https://www.google.com/search?q=" & Cells(i, 1) & "&rnd=" & WorksheetFunction.RandBetween(1, 10000)
Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
XMLHTTP.Open "GET", url, False
XMLHTTP.setRequestHeader "Content-Type", "text/xml"
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
XMLHTTP.send
Set html = CreateObject("htmlfile")
html.body.innerHTML = XMLHTTP.ResponseText
Set objResultDiv = html.getelementbyid("rso")
Set var1 = html.getelementbyid("resultStats")
Cells(i, 2).Value = var1.innerText
DoEvents
Next
end_time = Time
Debug.Print "end_time:" & end_time
Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
End Sub