【发布时间】:2020-05-03 17:36:37
【问题描述】:
我正在尝试从此 URL 中提取电影描述, "https://ssl.ofdb.de/plot/138627,271359,I-Am-Legend"
当我使用 CreateObject("InternetExplorer.Application") 方法时,它会为我提供正确的 Web 字符串,就像在网站上直观地看到的那样(这种方法很慢)
但是如果我使用MSXML2.XMLHTTP,一些返回的文本或者不可读的文本(但是这个方法很快)
第一种方法的输出:(没问题)
罗伯特·内维尔 (Will Smith) 的战争是在她的战争中,Wissenschaftler, aber auch er konnte nicht verhindern, dass ein Virus vor 3 Jahren die gesamte Menschheit befiel。 Nur er wurde aus unbekannten Gründen verschont und hat es sich inzwischen in einer mehr verwahrlosenden Umgebung eingerichtet。 Doch die Bedrohung wächst ständig under er versucht ein Gegensenrum zu entwickeln...
第二种方法的输出:
罗伯特·内维尔 (Will Smith) 的战争是在她的战争中,Wissenschaftler, aber auch er konnte nicht verhindern, dass ein Virus vor 3 Jahren die gesamte Menschheit befiel。 nur er ruude aus unbekanntengrändenverschont und haver in inzwischen在Einer inmer mehr verwahrlosenden umgebungeingingtichtet.tagsöltnismãanannsssigfrei begen,aber nachts lauernÃberallgefahrendurchirèhnlicheinfizierte gestalte gestalte gestalten,Die Nur Das Sonnenlicht Fern Halten坎恩Doch die Bedrohung wächst ständig under versucht ein Gegensrum zu entwickeln...
如您所见,第二种方法中存在一些 unicode 文本。
我在这里附上第二种方法代码,有什么想法可以得到与网站上看到的相同的文本吗?
Link_3 = "https://ssl.ofdb.de/plot/138627,271359,I-Am-Legend"
'required VBE (Alt+F11) > Tools > References > Microsoft HTML Object Library
Set xhr = New MSXML2.XMLHTTP60
Set html = New MSHTML.HTMLDocument
With xhr
.Open "GET", Link_3, False
.setRequestHeader "Content-Type", "text/html; charset=none"
.send
html.body.innerHTML = StrConv(.responseBody, vbUnicode)
End With
Dim sana As String
sana = html.getElementsByClassName("Blocksatz")(0).getElementsByTagName("font")(0).getElementsByTagName("b")(0).innerText
ActiveSheet.Cells(1, 4).Value = Application.WorksheetFunction.Clean(Trim(Application.WorksheetFunction.Substitute(html.getElementsByClassName("Blocksatz")(0).getElementsByTagName("font")(0).innerText, sana, "")))
Set xhr = Nothing
Set html = Nothing
【问题讨论】:
标签: html excel vba web-scraping