2015-08-14 1 views
0

Я абсолютно новый в webscraping и имею некоторые второстепенные знания VBA. Я пытаюсь сделать скребок, который входит на сайт, выполняет поиск, а затем сбрасывает детали поиска. Меня очень раздражает то, что мой скребок может выполнить поиск с заданными параметрами, но после того, как поиск сделан и загружен веб-сайт, я делаю запрос на чтение innerHTML в VBA, и результаты НЕ являются исходным кодом новой страницы. Поэтому я не могу извлечь какую-либо информацию, потому что мой код VBA не видит фактические данные html-страницы. Почему это происходит? Каков исходный код, который извлекает мои VBA?Excel код VBA читает неверный внутренний кодHTML

Благодарим вас за помощь!

Public Sub my_scraper() 

    Dim my_data1, my_data2 As String 
    Dim my_Coll As String 

    i = 1 



    my_data1 = ActiveSheet.Cells(1, 1).Value 
    my_data2 = ActiveSheet.Cells(1, 2).Value 

    my_Coll = profession_hu_scraper(my_data1, my_data2) 



    Cells(2, 2).Value = my_Coll 



End Sub 


Public Function profession_hu_scraper(ByVal my_data1 As String, ByVal my_data2 As String) As String 


    Dim objIE As InternetExplorer 
    Dim html As HTMLDocument 
    Dim Link As Object 
    Dim ElementCol As Object 
    Dim erow As Long 
    'Dim all_inp_el As Object 


    'Application.ScreenUpdating = False 

    Set objIE = CreateObject("InternetExplorer.Application") 

    With objIE 
     .Visible = True 
     .Navigate "https://www.profession.hu/" 

     Do While .ReadyState <> READYSTATE_COMPLETE 
      Application.StatusBar = "Loading website..." 
      DoEvents 
     Loop 

     Set html = .Document 
     Range("A16") = html.DocumentElement.innerHTML 




     .Document.getElementById("header_keyword").Value = my_data1 
     .Document.getElementById("header_location").Value = my_data2 

     Set my_classes = .Document.getElementsByClassName("p2_button_inner") 

     For Each my_class In my_classes 
      If my_class.getAttribute("value") = "Keresés" Then 
       Range("c4") = "Clicked" 
       my_class.Click 
       i = i + 1 
      End If 
     Next my_class 

     Do While .ReadyState <> READYSTATE_COMPLETE 
      Application.StatusBar = "Loading website..." 
      DoEvents 
     Loop 

     Set html = .Document 
     Range("B16") = html.DocumentElement.innerHTML 

    End With 
    Set objIE = Nothing 
     Application.StatusBar = "Finished" 

    'Application.StatusBar = "" 
End Function 

ответ

1

Через несколько дней я изо всех сил, наконец, смог выяснить, что код работает нормально. Проблема заключалась в том, что максимальный характер ячейки 32k, поэтому он не мог отобразить весь код html. Если вы новичок, следите за этим!

-2

Обновлено:

Public Function profession_Hu_Scraper(myData1 As String, my_data2 As String) 
    Dim ie As New InternetExplorer 
    Dim doc As HTMLDocument 
    Dim ws As Worksheet: Set ws = ActiveSheet 
    ie.navigate "https://www.profession.hu/" 

    Do While ie.readyState <> READYSTATE_COMPLETE 
    Loop 

    Set doc = ie.document 
    ws.Range("A16") = doc.getElementById(myData1).innerText 
    ws.Activate("B16") = doc.getElementById(mydata2).innerText 
    'whatever else you wish to do 
End Function 
+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+0

Я отредактировал свой ответ так, чтобы он был прав. мои appoligies – JamTay317

+0

Уважаемый JamTay. Спасибо за сценарий, но это мне совсем не помогает. В своем сообщении я описал, что моя проблема заключается в следующем: – hunsnowboarder

Смежные вопросы