2009-11-10 3 views
0

코드를 스크랩하는 중 생성하려는 웹 매시업에 대한 정보를 추출해야합니다.Html/Script Scraping Hpricot (Ruby On Rails)을 사용하는 Google지도

기본적으로,에서 코드를 스크랩하는 것을 시도하고있다 :

http://yellowpages.com.mt/Meranti-Ltd-In-Malta-Gozo;/Hair-Accessories;Hijjhkikke=Hiojhhfokje.aspx 

이 그냥 내가 긁어 따라서 나는 =/필요한 코드를 직접 프로그램을 공급되지 않습니다해야합니다 페이지 중 하나입니다. 내가 대신 내가 필요한 코드의 일부의를 나타 납니까

puts open(ypUrl, 'User-Agent'=>'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2') { |f| Hpricot(f) } 

(Hpricot을에서) 다음 코드를 사용하여 페이지를 긁어 때

, 난 단지

<script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAA8JYIIyGmC1BLOU85GKKkPRSNQenRT-s-Gs-9sYb3ZSBhRRTdcRTMq3zWEID1E35uXl9bdQKIPQIjNQ"></script><title> 
즉, 스크립트 참조를 볼 수 있어요

몰타의 Beautimport Ltd (발 메인 헤어 익스텐션) | 전화 번호부?? (Malta) Ltd | YellowPages.com.mt

이것은 Firefox에서 소스를 볼 때도 볼 수 있습니다. 그러나 Firebug의 요소 위로 마우스를 가져 가면 XPath를 얻을 수 있는데, 불행히도 스크립트 참조가 남아 있기 때문에 작동하지 않습니다. (나는 내가 설명하는지 잘 모르겠다). 스크립트로 인해 페이지에 생성 된 모든 코드가 실제로 필요합니다 (파이어 버그에서만 볼 수 있음).

<a title="Click to see this area on Google Maps" href="http://maps.google.com/maps?ll=35.88805,14.46627&spn=0.006988,0.015922&z=16&key=ABQIAAAA8JYIIyGmC1BLOU85GKKkPRSNQenRT-s-Gs-9sYb3ZSBhRRTdcRTMq3zWEID1E35uXl9bdQKIPQIjNQ&sensor=false&mapclient=jsapi&oi=map_misc&ct=api_logo" target="_blank"> 

다음 XPath는 있습니다 (// TBODY을 의미) : 내가 (지도에서 구글 아이콘 위에 마우스로 불을 지르고에서 가져온 다음 추출 할 수 있도록 나는이 필요 그것을 얻을 수 없기 때문에 그것의 쓸모, Hpricot을의 전체 코드를 제공하지 않는 한하지만, 언급 한 바와 같이!

/html/body/form/table//tr/td/div/table[2]//tr[2]/td[2]/div/div[2]/table//tr/td/div/div[2]/a 

을 이러한 방식으로 내가 LNG와 위도를 추출 할 수있을 것이다 내가 정말 내 프로젝트에 필요합니다. 난 정말 어떻게에 대해 가야할지 모르겠다. 다른 방식으로 Hpricot을 사용하여 필요한 모든 코드를 제공하지 않습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

답변

5

이것은 재미있었습니다. 그것은 할 수 있지만 hpricot 더 걸릴거야. 나는 위도와 경도를 채우기 위해 webservice가 호출되고 있음을 감지했다. 여기에 정보를 얻기 위해 할 수있는 것은 무엇입니까?

정상적으로하는 것처럼 사이트를 긁어지만 LoadMap javascript 함수에 대한 호출을 찾습니다. ID를 구문 분석

<script type='text/javascript'>LoadMapByDetail(1668154, 0, 1)</script> 

과 웹 서비스를 호출 선은 같을 것입니다.당신은 출력에 위도와 경도를 참조

require 'rubygems' 
require 'hpricot' 
require 'open-uri' 
require 'soap/wsdlDriver' 

WSDL_URL="http://yellowpages.com.mt/Web_Service/SearchMap.asmx?WSDL" 
soap = SOAP::WSDLDriverFactory.new(WSDL_URL).create_rpc_driver 
response = soap.GetCoordByDetail(:mainDetailID => '1668154', :type => '1') 
soap.reset_stream response.getCoordByDetailResult.anyType.each { |x| puts x.anyType } 

:이 도움이

35.88805 
14.46627 

희망이 뭔가를 찾고 종료됩니다. 행운을 빕니다!

+0

당신은 진지하게 에릭입니다! 고맙습니다. 당신의 도움없이 해결책을 찾지 못했을 것입니다. 다시 한번 감사합니다 – Erika

1

페이지의 HTML이 브라우저로 전송 된 후 페이지에 동적으로 추가되는 요소를 잡으려고하기 때문에 이러한 유형의 화면 스크래핑이 작동하지 않습니다. 이 경우 브라우저는 hpricot이며 페이지의 자바 스크립트가 실행 된 후 콘텐츠가 아닌 서버에서 보낸 콘텐츠 만 볼 수 있습니다.

방화범이 들려는 요소를 볼 수있는 이유는 방화 광이 브라우저에서 페이지의 현재 상태를 분석하기 때문입니다. 여기에는 Google지도의 역동적 인 스크립트가 포함되어 있습니다.