2014-11-04 5 views
0

Ruby 스크립트를 사용하여이 페이지를 대여 용 listings으로 긁어 내려합니다. 내가 실패한 메소드 중 일부는 Nokogiri와 Mechanize를 사용하지만 나머지 브라우저는 14 개의 목록을로드합니다. 나머지는 자바 스크립트가 포함 된 것으로 추정됩니다. 나는 간단히 rkelly을 보았습니다. 수업을 읽기에 운이 없었습니다.Ruby를 사용하여 자바 스크립트로로드 된 데이터의 긁힌 자국

##First Solution only returned 14 Results 
require 'mechanize' 
require 'nokogiri' 
require 'open-uri' 

url = "http://streeteasy.com/for-rent/soho/" 

listings = Nokogiri::HTML(open(url)) 

# agent = Mechanize.new 
# agent.get(url) 
# pp signin_page = agent.page.link_with(:text => 'Sign In').click 
# # pp signin_page.forms 

listing_sorted = listings.css('.item_inner') 

object = listing_sorted.map do |listing| 
    object = {} 
     object[:address] = listing.css("div.details_title a").first.inner_html 
     object[:price] = listing.css("span.price").inner_html.gsub(/[^0-9.]/, '') 
    object 
end 

sorted_object = object.sort! { |a,b| a[:price].to_i <=> b[:price].to_i }.last 20 


puts @json_object = sorted_object.to_json 
puts "There are #{sorted_object.length} listings" 

당신이 로그인 할 필요가 있지만에 목록을 내보낼 수있는 XLS 파일과의 기호도 너무 메신저 자바 스크립트 모달이된다 : 여기

는 내가 지금까지 무엇을 가지고 정말로 여기에 달라 붙는 지점에 도달했습니다. 이 문제에 접근하는 가장 좋은 방법은 무엇입니까?

+0

지금 해당 페이지를보고 있으며 응답 페이지 2 목록의 데이터를 볼 수 있습니다. – pguardiario

+0

반환 목록을 다시 확인하면 curl 요청을 사용하여 부분 응답 만받습니다. 페이지 당 1/3의 목록이 Javascript를 사용하여 렌더링됩니다. Watir을 사용하여 나머지 목록을 가져 오는 브라우저를 열 수있었습니다. –

답변

0

제가 할 수 있었던 것은 브라우저에서 페이지를 열고 구문 분석을 위해 Nokogiri에로드 된 HTML을 전달하는 Ruby Wrapper for Selenium을 사용하는 것입니다.