为何Nokogiri无法解析某个页面上的所有HTML? (带有示例)

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

为了练习,我正在尝试为此页面上每个旅舍卡的价格构建一个简单的刮板:

https://www.hostelworld.com/search?search_keywords=Madrid,%20Spain&country=Spain&city=Madrid&date_from=2019-11-29&date_to=2019-11-30&number_of_guests=1

[当我检查页面时,HTML清楚地显示每个价格都在“ price”('span.price')类的范围内。因此,我使用Mechanize获取页面正文,然后尝试使用Nokogiri解析正文。

使用这个简单的示例,我似乎无法访问卡片中的任何信息。下面的代码:

def scraper
  agent = Mechanize.new
  madrid_url = "https://www.hostelworld.com/search? 
  search_keywords=Madrid,%20Spain&country=Spain&city=Madrid&date_from=2019-11- 
  29&date_to=2019-11-30&number_of_guests=1"
  ###
  page = agent.get(madrid_url)
  page_body = agent.page.body
  parsed_body = Nokogiri::HTML(page_body)
  ###
  test = parsed_body.css('span.price').text
  test_price = test.to_i
  byebug
end

任何提示将不胜感激!可以看到HTML / CSS,但是无法访问它,这似乎违反直觉。预先谢谢!

ruby
1个回答
1
投票

如今,许多网站都通过AJAX(XHR)请求加载数据。此数据将无法用于机械化。

您可以通过在浏览器中禁用JavaScript的情况下加载页面来轻松地进行检查。如果未显示价格,则表示价格已被JavaScript延迟加载。

在这种情况下,您需要一个可以执行JavaScript的工具,例如Selenium

© www.soinside.com 2019 - 2024. All rights reserved.