2017-10-25 8 views
0

나는 VBA에서 초보자이며, 약간의 연습을 위해 Expedia (SG에서 방콕까지)의 비행 가격을 추출하려고 노력하고 있었다. 불행히도 내 코드가 제대로 작동하지 않습니다. 그것은 단지 하나의 가격만을 반환했습니다 (나는 그것이 어디서 왔는지 전혀 모릅니다). 누군가가 나를 도울 수 있다면 정말로 감사 할 것입니다. 고맙습니다! 문제는 여기에있다VBA를 사용하여 웹 사이트에서 데이터를 긁는 방법은 무엇입니까?

Sub ExtractRaw() 
Dim wb As Workbook 
Dim ws As Worksheet 
Set wb = ThisWorkbook 
Set ws = wb.Sheets("Sheet1") 

Dim ie As Object 
Set ie = CreateObject("InternetExplorer.Application") 
With ie 
.Visible = True .navigate "https://www.expedia.com.sg/Flights-Search?rfrr=TG.LP.SrchWzd.Flight&langid=2057&trip=OneWay&leg1=from:Singapore,%20Singapore%20(SIN-Changi),to:Bangkok,%20Thailand%20(BKK-Suvarnabhumi%20Intl.),departure:" & DateAdd("d", 1, Date) & "TANYT&passengers=children:0,adults:1,seniors:0,infantinlap:Y&options=cabinclass:economy,sortby:price,carrier:&mode=search&paandi=true" 

Do While ie.Busy 
DoEvents 
Loop 

Dim doc As HTMLDocument 
Set doc = ie.document 
While ie.readyState <> 4 
Wend 
On Error Resume Next 

Dim i As Integer For i = 0 To 200 
Range("A1").Value = ie.document.getElementById("flight-listing-container").getElementsByClassName("dollars price-emphasis")(i).innerText 

Next i 
ie.Quit 
Application.EnableEvents = True 
End With 
End Sub 
+0

이 게시물의 답변보기 : https://stackoverflow.com/questions/44955755/extracting-the-inner-text-from-span-using-vba/44956013#44956013 –

답변

1

내가 생각 : 당신은 임의의 200 회 반복하고 반복 가격으로 셀 A1을 업데이트하고

Dim i As Integer 
    For i = 0 To 200 
    Range("A1").Value = ie.document.getElementById("flight-listing-container").getElementsByClassName("dollars price-emphasis")(i).innerText 
Next i 

. 이것은 당신이 항상

Range("A1").Offset(i,0).Value = ie.document.getElementById("flight-listing-container").getElementsByClassName("dollars price-emphasis")(i).innerText 

그건 당신이 아래 그 elment에서 찾은 모든 내부 텍스트의 목록을주지하십시오 A1

에 일치하는 마지막 요소의 내부 텍스트로 남아있을 것입니다 의미 루프가 끝날 때까지의 열.

실제로 루프를 돌리기 전에 반복해야 할 반복 횟수를 결정해야한다고 생각합니다. 매번 200 번 반복 할 좋은 이유가 없다면 말입니다.

+0

아아 네, 이제 여러 값을 반환합니다! 고맙습니다. 그러나 반환 된 값은 행을 건너 뛰는 것처럼 보입니다. 셀 A1-7과 중간 중간의 빈칸이 비어 있습니다. –