我正在尝试使用Ruby脚本抓取此页面以租用listings。我尝试过的一些方法不成功的是使用Nokogiri和Mechanize但是浏览器只加载了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模式,所以我真的在这里找到了一个难点。什么是解决这个问题的最佳方法。
答案 0 :(得分:1)
我设法做的是使用Watir,一个用于Selenium的Ruby Wrapper在浏览器中打开页面,然后将加载的html传递给Nokogiri进行解析。
答案 1 :(得分:0)
您可以将http://streeteasy.com/for-rent/soho?page=n的链接编号为n,从1到最大页码。然后,您可以从网页收集所有列表。