0

XMLの形式が正しくなく、必要なすべてのデータが含まれていないため、次のWebサイトをスクレイプしようとしています。

http://www.cafebonappetit.com/menu/your-cafe/pitzer

ただし、Mechanizeを使用してドキュメントをフェッチすると、次の情報しか得られません。

{meta_refresh}
{title "Collins  | Claremont McKenna Cafés | Café Bon Appétit"}
{iframes}
{frames}
{links
 #<Mechanize::Page::Link "Welcome" "http://www.cafebonappetit.com/">
 #<Mechanize::Page::Link "Our Approach" "javascript://">
 #<Mechanize::Page::Link
 "Kitchen Principles"
 "http://www.cafebonappetit.com/our-approach/kitchen-principles">
 .....
 }

残念ながら、私は明らかにテーブルにあるものを取得する必要があります(私はそれらがiFrameであると思います)。何かご意見は?

ありがとう!

4

1 に答える 1

3

これは、メニュー項目をスクレイプする簡単なメカ+ノコギリスクリプトです。

require 'rubygems'
require 'mechanize'
require 'pp'

agent = Mechanize.new
url   = "http://www.cafebonappetit.com/menu/your-cafe/pitzer"
page  = agent.get(url)

#Grab each daily menu
page.search('div#menu-items > table.my-day-menu-table').each do |menu|
  day = menu.xpath('preceding-sibling::div[1]/a').text.strip
  puts day
  fare = []
  #Collect the menu items
  menu.xpath('tr').each do |item|
    fare << item.xpath('td/strong').map(&:text).join(": ")
  end
  pp fare
end

結果(抜粋):

Sunday, May 6th, 2012
["Brunch",
 "chef's table: custom omelet bar",
 "main plate: chicken sanchez",
 "meatless chicken and sauce",
 "options: banana pancakes",
 "stocks: beed barley",
 "vegetable minestrone",
 "Lunch",
 "main plate: steamed broccoli",
 "Dinner",
 "chef's table: pasta bar",
 "farm to fork: sauteed rainbow chard",
 "options: mozzarella sticks",
 "ovens: pizza bar",
 "main plate: roasted herb chicken",
 "baked ziti pasta",
 "steamed carrots and parsnips"]
于 2012-05-04T01:20:46.273 に答える