遍历网站中的href并打印信息

时间:2019-07-27 16:01:12

标签: excel vba web-scraping

这是一个很长的解释,如果您迷路了,我深表歉意。 我正在做一个代码,去网站上进行搜索,然后我需要的代码是遍历(a)标记中的所有href并打开每个单独的代码。在每个打开的href上,我要在该工作表上打印从该href打开的表格。我设法编写了将信息打印到工作表上的代码(通过分别从href导航到url)。我遇到的问题是,我不知道如何遍历主网站上的所有href。如果打开一个href并且我已将信息打印到工作表上之后,也有可能关闭该选项卡,因为我通常通常必须总共经历400-500 href。不幸的是,由于无法正常工作,我无法共享该网站,但我会提供所有必要的信息。

我还希望将所有信息打印到一个工作表上。我将提供自己的代码:

我需要的是在主代码中,在那里我导航到网站,然后逐一浏览

所以我想要实现的是能够导航到所有href并执行我的代码以将信息打印到工作表上。另外,如果可能,在打开每个href并打印信息之后,也可以关闭该标签,以使其不会保持打开状态。

感谢您的帮助。再次道歉,如果这很简单,但我对VBA还是陌生的,但发现它非常有趣。

我已经编写了循环并打开所有href的代码。

Dim ie As New SHDocVw.InternetExplorer   

导航到网站的代码

Dim HTMLDOC As HTMLDocument
Dim HTMLinput As MSHTML.IHTMLElement
Dim HTMLTables As MSHTML.IHTMLElementCollection

Application.ScreenUpdating = True
Application.DisplayAlerts = True

ie.Visible = True
ie.Navigate "website"

Do While ie.ReadyState <> READYSTATE_COMPLETE
Loop

Set HTMLDOC = ie.Document



Set HTMLinput = HTMLDOC.getElementById("SearchId")
HTMLinput.Value = str ' string with information taken from worksheet


Set HTMLinput = HTMLDOC.getElementById("search") 

我搜索所需的信息

HTMLinput.Click

Set HTMLDOC = ie.Document

ProcessHTMLPage HTMLDOC 

我调用将表格打印到工作表上的代码

以下是将所有信息打印到工作表的代码

Sub ProcessHTMLPage(HTMLPage As MSHTML.HTMLDocument)

Dim HTMLTable As MSHTML.IHTMLElement

Dim HTMLTables As MSHTML.IHTMLElementCollection
Dim HTMLRow As MSHTML.IHTMLElement
Dim HTMLCell As MSHTML.IHTMLElement
Set HTMLTables = HTMLPage.getElementsByClassName("data-grid")


Dim RowNum As Long, ColNum As Integer

For Each HTMLTable In HTMLTables
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = "Sheet2"
End With
RowNum = 1

For Each HTMLRow In HTMLTable.getElementsByTagName("tr")
ColNum = 1

For Each HTMLCell In HTMLRow.getElementsByTagName("td")  
Cells(RowNum, ColNum) = HTMLCell.innerText
ColNum = ColNum + 1
Next HTMLCell
RowNum = RowNum + 1    
Next HTMLRow

Next HTMLTable





End Sub

只需更新

因此,我设法使用以下代码将其打开:

    For Each HTMLA In HTMLAs

HTMLA.getAttribute("target")

                  If HTMLA.getAttribute("target") = "_blank" Then

                  HTMLA.Click

End If

                        Next HTMLA

我的问题是现在如何能够专注于每个单独的href并执行提取信息的代码,然后关闭多余的标签。目前,唯一发生的是我打开了所有标签页。

0 个答案:

没有答案