使用Ruby为使用Javascript加载的数据刮取URL

使用Ruby为使用Javascript加载的数据刮取URL,ruby,web-scraping,nokogiri,mechanize,scrape,Ruby,Web Scraping,Nokogiri,Mechanize,Scrape,我正在尝试使用Ruby脚本刮取这个页面以供出租。我尝试过的一些方法没有成功,它们是使用Nokogiri和Mechanize,但是浏览器只加载14个列表,其余的都是通过我认为是嵌入式javascript加载的。我已经简单地看了一遍,但没有幸读完所有可用的课程 以下是我到目前为止的情况: ##First Solution only returned 14 Results require 'mechanize' require 'nokogiri' require 'open-uri' url =

我正在尝试使用Ruby脚本刮取这个页面以供出租。我尝试过的一些方法没有成功,它们是使用Nokogiri和Mechanize,但是浏览器只加载14个列表,其余的都是通过我认为是嵌入式javascript加载的。我已经简单地看了一遍,但没有幸读完所有可用的课程

以下是我到目前为止的情况:

##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"
##第一个解决方案仅返回14个结果
需要“机械化”
需要“nokogiri”
需要“打开uri”
url=”http://streeteasy.com/for-rent/soho/"
listings=Nokogiri::HTML(打开(url))
#agent=Mechanize.new
#agent.get(url)
#pp signin_page=agent.page.link_与(:text=>“登录”)。单击
##pp签名页表格
listing_sorted=listings.css('.item_internal')
object=listing_sorted.map do | listing|
对象={}
object[:address]=listing.css(“div.details\u title a”).first.inner\u html
object[:price]=listing.css(“span.price”).inner_html.gsub(/[^0-9.]/,'')
对象
结束
排序的对象=object.sort!{a,b | a[:price]。to|i b[:price]。to|i}。最后20分钟
将@json\u object=sorted\u object.to\u json
放置“有#{sorted_object.length}个列表”

还有一个xls文件,您可以将列表导出到其中,但是您需要登录,并且登录是一个javascript模式,因此我在这里遇到了一个难题。解决此问题的最佳方法是什么。

您可以用n从1到最大页码计算的链接。然后,您可以从网页中收集所有列表。

我所做的是使用Watir,一种用于Selenium的Ruby包装器在浏览器中打开页面,然后将加载的html传递到Nokogiri进行解析

我现在正在查看该页面,我可以在响应中看到第2页列表的数据。如果您仔细检查返回的列表,那么使用curl请求只能得到部分响应。每页1/3的列表使用Javascript呈现。我可以使用Watir打开一个浏览器来获取其余的列表。