Web scraping 循环浏览网站链接并获取PDF';这是我的电脑
这个话题与 我正在尝试将当前的VBA代码转换为VBScript。我已经明白了,我必须删除变量类型(作为Dim语句的一部分),并使用CreatObject来获取这些对象,否则一切都应该按原样移植。DoEvents还必须替换为Wscript.sleep之类的东西 我提出了一些问题。当前,在运行VBS文件时,我收到一个错误,提示“需要对象:'MSHTML'”。指向第65行,在那里我设置了hDoc=MSHTML.HTMLDocument。我曾尝试在谷歌上搜索,但这次没有任何帮助 我该如何处理这件事Web scraping 循环浏览网站链接并获取PDF';这是我的电脑,web-scraping,vbscript,web-crawler,Web Scraping,Vbscript,Web Crawler,这个话题与 我正在尝试将当前的VBA代码转换为VBScript。我已经明白了,我必须删除变量类型(作为Dim语句的一部分),并使用CreatObject来获取这些对象,否则一切都应该按原样移植。DoEvents还必须替换为Wscript.sleep之类的东西 我提出了一些问题。当前,在运行VBS文件时,我收到一个错误,提示“需要对象:'MSHTML'”。指向第65行,在那里我设置了hDoc=MSHTML.HTMLDocument。我曾尝试在谷歌上搜索,但这次没有任何帮助 我该如何处理这件事 Do
DownloadFiles("https://www.nordicwater.com/products/waste-water/")
Sub DownloadFiles(p_sURL)
Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp
Dim hDoc
Dim Anchors
Dim Anchor
Dim sPath
Dim wholeURL
Dim internet
Dim internetdata
Dim internetlink
Dim internetinnerlink
Dim arrLinks
Dim sLink
Dim iLinkCount
Dim iCounter
Dim sLinks
Set internet = CreateObject("InternetExplorer.Application")
internet.Visible = False
internet.navigate (p_sURL)
Do Until internet.ReadyState = 4
Wscript.Sleep 100
Loop
Set internetdata = internet.document
Set internetlink = internetdata.getElementsByTagName("a")
i = 1
For Each internetinnerlink In internetlink
If Left(internetinnerlink, 36) = "https://www.nordicwater.com/product/" Then
If sLinks <> "" Then sLinks = sLinks & vbCrLf
sLinks = sLinks & internetinnerlink.href
i = i + 1
Else
End If
Next
wholeURL = "https://www.nordicwater.com/"
sPath = "C:\temp\"
arrLinks = Split(sLinks, vbCrLf)
iLinkCount = UBound(arrLinks) + 1
For iCounter = 1 To iLinkCount
sLink = arrLinks(iCounter - 1)
'Get the directory listing
xHttp.Open "GET", sLink
xHttp.send
'Wait for the page to load
Do Until xHttp.ReadyState = 4
Wscript.Sleep 100
Loop
'Put the page in an HTML document
Set hDoc = MSHTML.HTMLDocument
hDoc.body.innerHTML = xHttp.responseText
'Loop through the hyperlinks on the directory listing
Set Anchors = hDoc.getElementsByTagName("a")
For Each Anchor In Anchors
'test the pathname to see if it matches your pattern
If Anchor.pathname Like "*.pdf" Then
xHttp.Open "GET", wholeURL & Anchor.pathname, False
xHttp.send
With CreateObject("Adodb.Stream")
.Type = 1
.Open
.write xHttp.responseBody
.SaveToFile sPath & getName(wholeURL & Anchor.pathname), 2 '//overwrite
End With
End If
Next
Next
End Sub
使用以下命令代替
Set hDoc=MSHTML.HTMLDocument
:
Set hDoc = CreateObject("htmlfile")
在VBA/VB6中,可以指定变量和对象类型,但不能使用VBScript。您必须使用CreateObject
(或GetObject
:)来实例化对象,例如MSHTML.HTMLDocument
、Microsoft.XMLHTTP
、InternetExplorer.Application
,而不是将那些使用Dim objIE的对象声明为InternetExplorer.Application
另一个变化:
如果Anchor.pathname类似“*.pdf”,则
可以使用以下命令编写:
或使用:
此外,在sub开始时,您要执行以下操作:
Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp
在分配变量值或对象之前,应先声明变量。在VBScript中,这是非常轻松的,因为VBScript将为您创建未定义的变量,所以您的代码可以工作,但最好在使用变量之前对其进行Dim
除了
Wscript.sleep
命令外,您的VBScript代码将在VB6/VBA中工作,因此您可以在VB6或VBA应用程序(如Excel)中调试脚本。而不是设置hDoc=MSHTML.HTMLDocument
,使用:
Set hDoc = CreateObject("htmlfile")
在VBA/VB6中,可以指定变量和对象类型,但不能使用VBScript。您必须使用CreateObject
(或GetObject
:)来实例化对象,例如MSHTML.HTMLDocument
、Microsoft.XMLHTTP
、InternetExplorer.Application
,而不是将那些使用Dim objIE的对象声明为InternetExplorer.Application
另一个变化:
如果Anchor.pathname类似“*.pdf”,则
可以使用以下命令编写:
或使用:
此外,在sub开始时,您要执行以下操作:
Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp
在分配变量值或对象之前,应先声明变量。在VBScript中,这是非常轻松的,因为VBScript将为您创建未定义的变量,所以您的代码可以工作,但最好在使用变量之前对其进行Dim
除了
Wscript.sleep
命令外,VBScript代码将在VB6/VBA中工作,因此您可以在VB6或VBA应用程序(如Excel)中调试脚本。使用Set hDoc=CreateObject(“MSHTML.HTMLDocument”)
后,我收到另一个错误。请参阅已编辑的帖子。抱歉,请尝试CreateObject(“htmlfile”)
!是的,我已经得到了这个,但是接下来还有一些其他的问题hDoc.body.innerHTML=xHttp.responseText
根据这一点hDoc.body.innerHTML=xHttp.responseText
应该可以工作吗?这些行非常重要!!它们将网页的内容加载到HTML文档对象中。如果没有此选项,您的锚点集合将为空。使用Set hDoc=CreateObject(“MSHTML.HTMLDocument”)
后,我收到另一个错误。请参阅已编辑的帖子。抱歉,请尝试CreateObject(“htmlfile”)
!是的,我已经得到了这个,但是接下来还有一些其他的问题hDoc.body.innerHTML=xHttp.responseText
根据这一点hDoc.body.innerHTML=xHttp.responseText
应该可以工作吗?这些行非常重要!!它们将网页的内容加载到HTML文档对象中。如果没有此选项,您的锚集合将为空。请不要更改原始发布代码,因为它会更改问题和任何相关答案的上下文。原始问题是Set hDoc=MSHTML.HTMLDocument
更改将使提供的答案无效。已回滚问题。请不要更改原始发布代码,因为它会更改问题和任何关联答案的上下文。原始问题是Set hDoc=MSHTML.HTMLDocument
更改将使提供的答案无效。我已经把问题退回去了。
Set xHttp = CreateObject("Microsoft.XMLHTTP")
Dim xHttp