使用 Ruby 抓取通过 Javascript 加载的数据的 URL

问题描述 投票:0回答:2

我正在尝试使用 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 模式,所以我真的在这里遇到了症结所在。解决这个问题的最佳方法是什么?

ruby web-scraping nokogiri mechanize
2个回答
1
投票

我设法使用 Watir(Selenium 的 Ruby 包装器)在浏览器中打开页面,然后将加载的 html 传递到 Nokogiri 进行解析。


0
投票

您可以计算 http://streeteasy.com/for-rent/soho?page=n 的链接,其中 n 从 1 到最大页码。然后您就可以从网页上收集所有列表。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.