2011-08-08 2 views
0

Excel 2010을 통해 작업했습니다. XMLHTTP 개체를 통해 양식 데이터를 보내려 고 노력하지 않고 웹 페이지를 가져 오려고합니다. 내가 일하는 웹 사이트가 http://espn.go.com/mlb/players이며 검색 창 (예 : Fister)을 통해 특정 플레이어를 검색하려고합니다. 다음은 양식 태그 사이의 소스 코드입니다.VBA에서 XMLHTTP를 통해 양식 데이터 보내기

<form id="searchBox" name="searchBox" action="http://search.espn.go.com/results" method="get" accept-charset="utf-8" style="color: #999999;"> 
<div class="clearfix"> 
<input autocomplete="off" class="text" type="text" placeholder="Search" name="searchString" id="searchString" /> 
<input type="hidden" name="page" id="page" value="null" /> 
<input type="hidden" name="fromForm" value="true" /> 

<input class="submit" type="submit" value="" /> 
</div> 
</form> 

검색을 시도 할 수있는 코드는 다음과 같습니다.

Sub SearchPlayer() 
Dim xml As MSXML2.ServerXMLHTTP 
Dim search, url As String 

search = "searchString=Fister&page=null&fromForm=true" 
url = "http://espn.go.com/mlb/players" 

Set xml = New MSXML2.ServerXMLHTTP 
xml.Open "POST", url, False 
xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xml.send search 

MsgBox xml.responseText 

Set xml = Nothing 
End Sub 
+2

Html 양식은 GET 방법을 사용하고 코드 샘플은 POST를 사용합니다. – Filburt

답변

0

이 코드는 나를 위해 일한 :

Function SearchPlayer(playerName As String) As String 

Dim xml As MSXML2.XMLHTTP60 
Dim result As String 

Const BASE_URL As String = "http://search.espn.go.com/results?searchString={name}&page=null&fromForm=true" 

Set xml = CreateObject("MSXML2.XMLHTTP.6.0") 

With xml 
    .Open "GET", Replace(BASE_URL, "{name}", playerName), False 
    .send 
End With 

result = xml.responseText 

SearchPlayer = result 

End Function 

는 (시스템에 MSXML 6.0을했다고 가정 - 지역 system32 폴더에서 msxml6.dll)

언급 한 바와 같이, 양식 사용을 GET 요청을 사용하면 ACTION 속성을 사용하고 다음과 같이 단일 문자열에 INPUT 태그의 값을 추가 할 수 있습니다.

http://search.espn.go.com/results?searchString=Fister&page=null&fromForm=true

Sub를 기능화하여 각기 다른 플레이어 이름으로 호출하여 각 페이지를 긁을 수 있습니다. 물론, 공백이있는 플레이어 이름 (here's one)으로 호출 될 것으로 예상되는 경우 urlencode 함수가 필요합니다.

관련 문제