Excel 列A中所有URL上的Webscrape循环
我正试图从一个URL列表中抓取Facebook视频标题 我已经让我的宏为一个视频工作,在这个视频中,URL被内置到代码中。我希望脚本能够遍历A列中的每个URL,并将视频标题输出到B列。有什么帮助吗 当前代码:Excel 列A中所有URL上的Webscrape循环,excel,vba,web-scraping,Excel,Vba,Web Scraping,我正试图从一个URL列表中抓取Facebook视频标题 我已经让我的宏为一个视频工作,在这个视频中,URL被内置到代码中。我希望脚本能够遍历A列中的每个URL,并将视频标题输出到B列。有什么帮助吗 当前代码: Sub ScrapeVideoTitle() Dim appIE As Object Set appIE = CreateObject("internetexplorer.application") With appIE .navigat
Sub ScrapeVideoTitle()
Dim appIE As Object
Set appIE = CreateObject("internetexplorer.application")
With appIE
.navigate "https://www.facebook.com/rankertotalnerd/videos/276505496352731/"
.Visible = True
Do While appIE.Busy
DoEvents
Loop
'Add Video Title to Column B
Range("B2").Value = appIE.document.getElementsByClassName("_4ik6")(0).innerText
appIE.Quit
Set appIE = Nothing
End With
End Sub
如果您有url的“276505496352731”部分,或者实际上是A列中的整个url,您可以将一个范围设置为最大值,然后循环直到该范围为空,每次刮取时向下移动一次
比如:
'Dims as before
Dim r as range
With appIE
set r = Range("B1") ' Assumes B1 is the top of the URL list
do while r.value > ""
.navigate r.value
'Do the rest of your IE stuff
r.offset(0,1).Value = appIE.document.getElementsByClassName("_4ik6")(0).innerText
set r = r.offset(1)
Loop
End With
希望这会有所帮助。如果您可以转到VBE>Tools>References>添加对Microsoft HTML对象库的引用,则可以执行以下操作: 将所有URL读入一个数组。循环数组并使用xmlhttp向页面发出
GET
请求。将响应读入HTMLDocument
变量,并使用css选择器提取标题并存储在数组中。在循环结束时,将所有结果一次性写入工作表
Option Explicit
Public Sub GetTitles()
Dim urls(), ws As Worksheet, lastRow As Long, results(), i As Long, html As HTMLDocument
Set html = New HTMLDocument
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws
lastRow = .Cells(.rows.Count, "A").End(xlUp).Row
urls = Application.Transpose(.Range("A2:A" & lastRow).Value)
End With
ReDim results(1 To UBound(urls))
With CreateObject("MSXML2.XMLHTTP")
For i = LBound(urls) To UBound(urls)
If InStr(urls(i), "http") > 0 Then
.Open "GET", urls(i), False
.send
html.body.innerHTML = .responseText
results(i) = html.querySelector(".uiHeaderTitle span").innerText
End If
Next
End With
ws.Cells(2, 2).Resize(UBound(results), 1) = Application.Transpose(results)
End Sub
css选择器与页面的匹配:
您是否获得了该单元的视频标题,该视频标题是否正常工作?看起来您只需要在一个范围内循环,并将其设置为
。导航
值…您尝试了什么?是的,标题工作正常,只是不知道如何在该范围内循环…我一直收到一个错误,“运行时错误”-2147467259(80004005):“对象“IWebBrowser2”的方法“文档”失败”。你知道我做错了什么吗?好的,这里的错误是在你的刮片部分,而不是Excel循环部分。我不确定这是如何工作的,但请尝试以下操作:确保您的.visible=true
仍在代码中。获取一个非类型变量Dim v
,并将其设置为getElements的结果。。。呼叫所以Set v=.document.getElementsByClassName(“\u 4ik6”)
。这样做的原因是它可能找不到具有该类的任何元素,如果是,它将返回一个空节点列表,因此获取第一个此类项的(0)索引引用将失败。因此,首先将结果输入到v中。+1表示您伟大的代码。我想了解更多关于querySelector的信息。我已经检查了页面并搜索了.uiHeaderTitle span
,但我没有在其中找到标题@YasserKhalil查看我的个人资料页面中我通常向人们推荐的链接。如果我转到显示的facebook行,并在浏览器中输入.uiHeaderTitle span,它将与标题匹配。你就是这么想的吗?我不知道你的页面是否会因为某种原因而被结构改变。当我检查.uiHeaderTitle span
时,我发现了两个结果,两个结果的内部文本都不是标题。。!我发现了问题所在。当我使用IE进行检查时,它的工作原理与您的解释完全一致(我没有在IE中登录FB)。但是在查看chrome上的视频时,我发现结果是两个,没有一个包含标题(在chrome中,我在FB上登录到我的帐户)。类名可能是动态的,这就是为什么我避免使用它们。