2017-02-15 1 views
1

VBA를 사용하여 웹 사이트를 열고이 웹 사이트의 HTML 코드에서 특정 단락을 찾고 (<p class="myClass">XYZ</p>)이 값을 Excel로 반환하고 싶습니다. 내 예 : "XYZ".웹 사이트를 열고 VBA에서 Excel로 특정 값과 반환 값을 찾으십시오.

웹 사이트에는 위 클래스의 단락 (p 요소)이 하나만 있습니다.

나는 이것이 가능하지만 여기서 어디에서 시작해야할지 모른다.

내 코드 :

Dim objIE As Object 

Set objIE = CreateObject("InternetExplorer.Application") 

With objIE 
    .Navigate varUrl 
    Do While .Busy 
      Application.Wait Now + TimeValue("0:00:01") 
    Loop 
    .Visible = True 
End With 
대신 IE가 웹 요청을 사용 여는
+0

웹 사이트 링크를 게시 할 수 있습니까? –

+0

불행히도 웹 사이트 링크를 게시 할 수없고 어쨌든 액세스 할 수 없지만 필요한 경우 HTML 일부를 공유 할 수 있습니다. – Mike

답변

1
Dim objIE As Object 

Set objIE = CreateObject("InternetExplorer.Application") 

With objIE 
    .Navigate varUrl 
    Do While .Busy 
      Application.Wait Now + TimeValue("0:00:01") 
    Loop 
    .Visible = True 
End With 

'HTML document 
Dim doc As Object 
Set doc = objIE.document 

Dim el As Object 
Dim myText as string 
For Each el In doc.GetElementsByClassName("myClass") 
    'put paragrah text in cell A1 
    Cells(1, 1).Value = el.innerText 

    'put your paragraph text in a variable string 
    myText = el.innerText 
Next el 
+0

감사합니다. 이것이 사이트의 모든 요소 값을 나열한다는 것이 맞습니까? 클래스를 사용하여 p 요소의 값만 가져오고이를 Excel로 어떻게 반환 할 수 있습니까? 예 : 변수에? – Mike

+1

그러면 지정한 클래스 이름으로 페이지의 모든 객체가 반환되고 셀 A1에 저장됩니다. –

+0

다시 한번 감사드립니다! 이것도 좋겠지 만 내가 실행할 때 Debugger는이 줄에서 시작한다. Set doc = objIE.document - 여기에 (Dim) doc을 어떻게 정의해야합니까? – Mike

2

:

Set oRequest = New WinHttp.WinHttpRequest 
With oRequest 
    .Open "GET", sUrl, True 
    .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" 
    .Send "{range:9129370}" 
    .WaitForResponse 
    Set index = .ResponseText.IndexOf("<p class=""myClass"">") 
    Set text = .ResponseText.Substring(index,3) 
    Cells(row, col).Value = text 
End With 

당신은 당신이 찾고있는 문자열의 길이를 알 수없는 경우, index 뒤에 "<"문자가 나올 때까지 루프를 수행 할 수도 있습니다.

+0

이것은 내가 염두에 두었던 것입니다 - 감사합니다. 어떻게 결과 값을 Excel로 반환 할 수 있습니까? 변수 등에서 사용하기 위해? – Mike

+0

(Dim) sUrl을 문자열로 정의하고 URL을 할당했습니다. 여기서 oRequest를 어떻게 정의해야합니까? – Mike

+0

oRequest는 'WinHttp.WinHttpRequest'입니다. 해당 라이브러리를 설치 했습니까? 또한 Excel 프로그램 안에 있습니까? 그렇다면'Cells (row, col) .Value = text'와 같이 할 수 있어야합니다. –

0

이것은 까다롭고 흥미로운 질문입니다. StackOverflow에서 question-hyperlink 클래스에있는 현재 웹 사이트의 제목을 얻고 싶다고 가정 해 봅시다. 따라서, @ 매트 스핑크스의 솔루션의 아이디어를 사용하여이 같은 결과가 올 수 있습니다 : 당신이 문자열의 제목을 얻고 더 작동 할 수

Option Explicit 

Public Sub TestMe() 

    Dim oRequest As Object 
    Dim strOb  As String 
    Dim strInfo  As String: strInfo = "class=""question-hyperlink"">" 
    Dim lngStart As Long 
    Dim lngEnd  As Long 

    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 

    With oRequest 
     .Open "GET", "http://stackoverflow.com/questions/42254051/vba-open-website-find-specific-value-and-return-value-to-excel#42254254", True 
     .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8" 
     .Send "{range:9129370}" 
     .WaitForResponse 
     strOb = .ResponseText 

    End With 

    lngStart = InStr(1, strOb, strInfo) 
    lngEnd = InStr(lngStart, strOb, "<") 

    Debug.Print Mid(strOb, lngStart + Len(strInfo), lngEnd - lngStart - Len(strInfo)) 

End Sub 

대신 Debug.print의.

관련 문제