无法使用vba中的createDocumentFromUrl获取某些内容

时间:2018-01-13 23:35:58

标签: vba excel-vba web-scraping excel

我已经在vba中编写了一些代码,使用.createDocumentFromUrl()方法从torrent网站获取电影名称。由于我从未使用过这种方法,并且没有找到任何可以成功使用的显着信息,我会陷入困境。不过我试过创建一个脚本。

这是我的尝试:

Sub Fromurl_Method()
    Const URL As String = "https://yts.am/browse-movies"
    Dim hStart As HTMLDocument, hdoc As HTMLDocument

    Set hStart = New HTMLDocument
    Set hdoc = hStart.createDocumentFromUrl(URL, vbNullString)

    Do While hdoc.readyState = "loading" Or hdoc.readyState = "interactive": DoEvents: Loop
    Debug.Print hdoc.DocumentElement.innerHTML
End Sub

当我执行上面的脚本时,它会获取一些不是来自该网站的html元素。我仔细研究了我解析过的元素,并在顶部This content cannot be displayed in a frame注意到这一行。它与大多数网站的行为方式相同。我怎样才能成功?提前致谢。 我的目的是再次使用.createDocumentFromUrl()来解析该网站上的所有电影名称。

1 个答案:

答案 0 :(得分:0)

Sub Get_Info()

Dim Elems, e As Variant

Const READYSTATE_COMPLETE& = 4&
Dim ie As Object
Set ie = Nothing
DoEvents

Set ie = CreateObject("InternetExplorer.Application")
DoEvents

With ie
    .Visible = false
    .Navigate "https://yts.am/browse-movies"
    While Not .readyState = READYSTATE_COMPLETE
        DoEvents
    Wend
End With

Dim i As Double

With ie.Document
    Set Elems = .getElementsByTagName("a")
    DoEvents
    i = 2
    For Each e In Elems
        If e.getAttribute("class") = "browse-movie-title" Then
            Range("A" & i).Value = e.innerText
            i = i + 1
        End If
    Next e

End With

Set Elems = Nothing
Set e = Nothing

ie.Quit
Set ie = Nothing

End Sub

上面的代码会为您提供所有电影的列表。如果您只需要第一个代码,只需修改代码以使其适应您获取第一个代码的需求。