Как я могу очистить несколько страниц / ссылок одновременно, используя VBA? - PullRequest
1 голос
/ 04 мая 2020

Я сейчас пытаюсь почистить информацию с этой страницы Reddit . Моя цель - сделать так, чтобы Excel открывал все сообщения на новых вкладках, а затем я хочу собрать информацию с каждой из этих страниц, поскольку на начальной странице не так много информации.

Последние несколько часов я пытался это выяснить, но, по общему признанию, я довольно озадачен тем, как это сделать, просто в целом не уверен, что делать дальше, поэтому любые указатели будут очень благодарны!

Вот мой текущий код, он работает достаточно прилично, но, как я уже сказал, я не уверен, что мне следует делать дальше, чтобы открывать найденные ссылки одну за другой и очищать каждую страницу для данных. Ссылки удаляются с этой первой страницы, а затем добавляются в мою электронную таблицу прямо сейчас, но если возможно, я бы хотел просто пропустить этот шаг и очистить их все сразу.

Спасибо! :)

Sub GetData()

Dim objIE As InternetExplorer
Dim itemEle As Object
Dim upvote As Integer, awards As Integer, animated As Integer
Dim postdate As String, upvotepercent As String, oc As String, filetype As String, linkurl As String, myhtmldata As String, visiComments As String, totalComments As String, removedComments As String
Dim y As Integer

Set objIE = New InternetExplorer
objIE.Visible = False

objIE.navigate (ActiveCell.Value)
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

y = 1

For Each itemEle In objIE.document.getElementsByClassName("flat-list buttons")
visiComments = itemEle.getElementsByTagName("a")(0).innerText
linkurl = itemEle.getElementsByTagName("a")(0).href
Sheets("Sheet1").Range("A" & y).Value = visiComments
Sheets("Sheet1").Range("B" & y).Value = linkurl
y = y + 1
Next

End Sub

1 Ответ

2 голосов
/ 05 мая 2020

Вы сможете собрать URL-адреса, затем перейти в al oop и записать результаты с посещенной страницы в массив, затем с массива на лист. Добавьте это после вашей существующей строки

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

Add:

Dim nodeList As Object , i As Long, urls(), results()

Примечание. Вы потенциально получаете выигрыш только при загрузке страницы, поскольку VBA является однопоточным. Для этого вам нужно будет сохранить ссылку на каждую вкладку или сначала открыть все, а затем l oop через соответствующее открытие windows, чтобы выполнить очистку. Я бы предпочел, чтобы быть честным в той же вкладке.

Set nodeList = ie.document.querySelectorAll(".comments")
Redim urls(0 To nodeList.Length-1)
Redim results(1 to nodeList.Length, 1 to 3)
'Store all urls in an array to later loop
For i = 0 To nodeList.Length -1 
    urls(i) = nodeList.item(i).href
Next

For i = LBound(urls) To UBound(urls)
    ie.Navigate2   urls(i)
    While ie.Busy Or ie.Readystate <> 4: DoEvents:Wend
    'may need a pause here
    results(i + 1, 1) = ie.document.querySelector("a.title").innerText 'title
    results(i + 1, 2) = ie.document.querySelector(".number").innerText 'upvotes
    results(i + 1, 3) = ie.document.querySelector(".word").NextSibling.nodeValue '%
Next
ActiveSheet.Cells(1,1).Resize(UBound(results,1) , UBound(results,2)) = results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...