我正试图使用Ruby脚本在这个页面上抓取出租房源。我尝试过的一些方法没有成功,比如使用Nokogiri和机械化,但浏览器只加载了14个列表,其余的都是通过我认为是嵌入式javascript加载的。我曾短暂地看过rkelly,但在阅读现有课程时运气不佳。
以下是我目前所拥有的:
##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文件,您可以将列表导出到需要登录的位置,并且登录是javascript模式,所以我真的遇到了一个症结。解决这个问题的最佳方法是什么。
我所做的是使用Watir,一个用于Selenium的Ruby Wrapper,在浏览器中打开页面,然后将加载的html传递到Nokogiri中进行解析。
您可以计算http://streeteasy.com/for-rent/soho?page=n其中n从1到最大页码。然后,您可以从网页中收集所有列表。