2012-12-18 3 views
0

나는 VB 프로그램을 구글로 만드는 방법을 안다. 나는 주변을 탐색하는 방법을 알고 있지만 결과를 조작하는 방법을 모르겠습니다.vb.net에서 특정 Google 결과를 얻으려면 어떻게해야합니까? 목록 상자에

기본적으로 Google에서 검색 결과를 가져 와서 목록 상자에 출력하고 싶습니다. 따라서 사용자가 햄버거를 검색하면 검색 결과가 목록 상자에 출력됩니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

Public Class Form1 

Dim look, retrieve As String 

Private Sub Search_Click(sender As Object, e As EventArgs) Handles Search.Click 
look = InputBox("What are you looking for?") 
look = look.Replace(" ", "+") 
Dim G1 As String = "http://www.google.co.uk/#hl=en&tbo=d&output=search&sclient=psy-ab&q=" 
WebBrowser1.Navigate(G1 + look) 

retrieve = InputBox("What links do you want to retrieve?") 

End Sub 

End Class 

나는 구글 API를 사용하기 쉽게 알고 있지만, 그것은 또한 많은 느린 :

여기에 지금까지 내 코드입니다. 나는 과거에 API를 사용했고 성능 문제를 보았습니다. 방금 웹 사이트의 소스를 다운로드하는 방법을 다른 스레드에서 보았습니다. 꽤 빨리. 다운로드 한 소스에서 URL을 가져 오는 방법을 모르겠습니다. 문자열 조작으로 여기있는 사람이 있습니까? 지금까지

코드는 :

sourcecode = ((New Net.WebClient).DownloadString(G1 + look)) 
+0

regex로 시도하지 않았는지 확인하십시오. http://stackoverflow.com/a/1732454/264607 – BlackICE

답변

0

당신이 XPATH로보고 오픈 소스 타사 도구를 사용하여 부작용없는 경우, HTML 민첩성 팩 (Cose Examples)는 HTML을 구문 분석을위한 훌륭한 도구가 될 예정이다.

고통이 될 수있는 또 다른 옵션은 소스 HTML 문자열을 유효한 XML 문서로 변환 한 다음 VB의 XML 네임 스페이스를 사용하여 구문 분석하는 것입니다. 나는 YouTube 재생 목록을 구문 분석하는 데 사용하는 응용 프로그램에서이 작업을 수행했습니다. 이 접근 방식의 문제점은 html 문자열을 XML 문서로 변환하기 전에 HTML 문자열을 수동으로 정리하는 것입니다.

마지막으로 문자열 메서드 만 사용하여 html 문자열을 소화하려고 할 수 있지만 오류가 발생하기 쉽고 다시 문서 구조에 크게 의존합니다.

무슨 일이 있어도 HTML을 파싱하는 방법을 사용하면 현재 Google 검색 결과에 ID가 '검색'인 div가 있습니다. 순수 문자열 스탠드의 관점에서 당신은 같은 소스 문자열이 검색 수 :

dim searchTerm as string = "<div id=""search""" 
dim searchLoc as integer = 0 
searchLoc = sourceCode.indexOf(searchTerm) 

당신이 검색 결과 섹션에서는 먼저 "<li class=""g""" 토큰 다음 그 내부 "<h3 class=""r""" 토큰을 검색 할 수 있습니다 시작하는 위치를 알면

. h3 안에는 결과 텍스트가 있습니다. 토큰을 얻으려면 먼저 각각 </h3></li>을 사용하고 싶을 것입니다.

일단이 텍스트가 있었으면이를 검색하고 html 태그를 제거하여 위생을해야합니다. 키 문자의 인덱스를 반복함으로써 링크 텍스트를 소비하는 알고리즘을 쉽게 작성할 수 있습니다.

요점은 점진적으로 작은 조각으로 나누고 작은 조각을 소화하는 것입니다. 아무리 당신이 그것에 접근하더라도 당신은 이것을 할 것입니다. 그러나 일종의 파서를 사용하고 XPATH 선택기 표현식의 힘을 활용하면 토큰을 수동으로 생성하는 것보다 훨씬 쉬워집니다.

순수한 문자열 방식은 이것을 시도하고 수행하는 가장 느린 방법 일 것입니다. 나는 HTML 파서의 어떤 형태로 그것을하는 방법을 찾으려고 노력할 것을 강력히 권고한다. 그렇지 않으면 당신이 일하는 해결책을 얻기 전에 미칠지도 모른다.

마지막 메모에서 양식에 웹 브라우저 컨트롤을 사용하고있는 것 같습니다.이 컨트롤과 관련 클래스를 사용하여 검색하는 페이지의 html을 파싱 할 수 있습니다. 이전에 해본 적이 있지만 웹을 스크랩하는 가장 효율적인 방법은 아니지만 매우 쉽습니다. 이 컨트롤 리턴 객체가 포함 된 메소드에 대해서는 HTMLDocument 클래스를 살펴보십시오.

관련 문제