Asp classic 使用经典ASP,如何获取或截取html页面的元标记?
使用下面的代码,我可以访问站点,获取数据,但是我无法获得metatitle标签。令人惊讶的是,在使用经典ASP进行屏幕抓取时,我搜索了获取元标记的方法,但只找到了几个示例,这两个示例我都无法使用 有什么帮助吗Asp classic 使用经典ASP,如何获取或截取html页面的元标记?,asp-classic,Asp Classic,使用下面的代码,我可以访问站点,获取数据,但是我无法获得metatitle标签。令人惊讶的是,在使用经典ASP进行屏幕抓取时,我搜索了获取元标记的方法,但只找到了几个示例,这两个示例我都无法使用 有什么帮助吗 rss_url = "https://www.nationalgeographic.com/science/2019/06/opal-fossils-reveal-new-species-dinosaur-australia-fostoria/" Set objHTTP = Create
rss_url = "https://www.nationalgeographic.com/science/2019/06/opal-fossils-reveal-new-species-dinosaur-australia-fostoria/"
Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
objHTTP.Open "GET", rss_url, False
objHTTP.Send
if objHTTP.Status = 200 Then sdata = BinaryToString(objHTTP.ResponseBody)
Set objHTTP = Nothing
Set regEx = New RegExp
regEx.Pattern = "<meta.*property=""og:image"".*content=""(.*)"".*\/>"
regEx.IgnoreCase = True
Set matches = regEx.Execute(sdata)
if matches.Count > 0 then
KeywordAl = matches(0).SubMatches(0)
response.write "Image = " & KeywordAl&"<hr>"
end if
试试这个:
函数GetTextFromUrlurl
Dim-oXMLHTTP
暗淡状态
设置oXMLHTTP=CreateObjectMSXML2.ServerXMLHTTP.3.0
oXMLHTTP.openget,url,False
发送
如果oXMLHTTP.Status=200,则
GetTextFromUrl=oXMLHTTP.responseText
如果结束
端函数
Dim sResult:sResult=GetTextFromUrlhttps://www.nationalgeographic.com/science/2019/06/opal-fossils-reveal-new-species-dinosaur-australia-fostoria/
Set regEx=New RegExp
正则表达式模式=
regEx.IgnoreCase=True
设置匹配项=regEx.ExecutesResult
如果匹配。计数>0,则
关键词=匹配0.SubMatches0
response.write Image=&KeywordAl&
如果结束
对于我来说,该页面的输出:
图像=
编辑:在这里添加了一些调试信息。请尝试此代码段,看看它对您的TLS版本有何说明-此站点可能拒绝低于特定TLS级别的连接
设置objHttp=Server.CreateObjectWinHTTP.WinHTTPRequest.5.1
objHttp.openget,https://howsmyssl.com/a/check错误的
发送
Response.Write objHttp.responseText
设置objHttp=Nothing
答复.完
元标题标签,如我认为标签不再在网络标准中??这就是我不想抓住它的原因。元标题标签是,或者至少是它的一个版本。我在那页上看了看,不存在,但确实存在。不过,我注意到大多数网站都有。哪里也去不了,你从哪里听说的?就用这个吧。如果你真的想这样做,坚持抓取meta标签中的东西,在你试图抓取的页面中。。。不是这个。也不是这个。是这样的:。属性=vs名称=。请注意,不同的网站可能会使用稍有不同的语法,您必须仔细检查…基于我的搜索,我得到了很多关于这个的混合答案。这是本论坛的主题。想法?为了继续@thirtydot,请看:您将看到,这仍然是规范的一部分,不在任何地方,谢谢。我在oXMLHTTP上收到错误。发送:发生安全错误。我切换到6.0并收到错误:系统无法找到指定的资源。这意味着什么?我可以访问其他https站点,因此我认为这不是证书问题。您是否尝试过MSXML2.ServerXMLHTTP.6.0?还是MSXML2.XMLHTTP.6.0?第一个对我有用,但是第二个会产生你提到的错误。我在上面的回答中添加了一个小片段,你能试试这个来确认你的TLS级别吗?这可能是因为网站拒绝某些TLS级别。经典ASP使用它运行的服务器的默认TLS,但有些人尝试设置该级别,例如,在这里,但除非安装该级别,否则您将运气不佳。这在哪个服务器上运行?如果你想安装的话,看看吧?啊,可能是这样。我检查了国家地理域,他们不接受TLS1.0连接:TLS1.3不接受,TLS1.2不接受,TLS1.1不接受,TLS1.0不接受。所以我想这就是问题所在。对不起,我不知道该怎么办:
Function BinaryToString(byVal Binary)
'--- Converts the binary content to text using ADODB Stream
'--- Set the return value in case of error
BinaryToString = ""
'--- Creates ADODB Stream
Dim BinaryStream
Set BinaryStream = CreateObject("ADODB.Stream")
'--- Specify stream type.
BinaryStream.Type = 1 '--- adTypeBinary
'--- Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.Write Binary
'--- Change stream type to text
BinaryStream.Position = 0
BinaryStream.Type = 2 '--- adTypeText
'--- Specify charset for the source text (unicode) data.
BinaryStream.CharSet = "UTF-8"
'--- Return converted text from the object
BinaryToString = BinaryStream.ReadText
End Function