4

Nokogiri を使用して HTML スクレイピングを試みていますが、期待した結果が得られません。

この特定の URL で、特定の場所の取引を調べていて、そのページに取引の詳細を表示したいと考えていました。.small-deals-contページの CSS セレクターであり、同様.deal-titleに取引タイトルの CSS セレクターです。

require 'rubygems' 
require 'nokogiri'
require 'open-uri'

url = "http://www.snapdeal.com/local-deals-Chennai-all?category=all&HID=dealHeader_all"

doc =Nokogiri::HTML(open(url))

puts doc.at_css("title").text

doc.css(".small-deals-cont").each do |item|
  puts item.at_css(".deal-title")
end
4

2 に答える 2

4

Nokogiri は実際にこれに対して機能し、mechanize を使用する必要はありません。コードは次のとおりです。

require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'csv'

hotel= Array.new

cuisine=Array.new

url= "http://www.abcd.com"

1.upto(5) do |page_num|
  doc = Nokogiri::HTML(open("http://www.abcd.com/cit/restaurants?page=#{page_num}"))
  puts doc.at_css("title").text

  doc.css("article").each do |item|
    hotel << item.at_css("a").text
    cuisine << item.at_css(".tags").text
  end
end

@hotel=hotel
@cuisine=cuisine

(0..@hotel.length - 1).each do|index|

  puts "Hotel: #{@hotel[index]}"
  puts "Cuisine: #{@cuisine[index]}"
  puts " "

end


CSV.open("output2.csv", "wb") do |row|

  row << ["Hotel", "Cuisine"]

  (0..@hotel.length - 1).each do |index|
    row << [@hotel[index], @cuisine[index]]
  end

end
于 2012-09-07T11:22:28.040 に答える
2

スクレイピングを防ぐために、最初のページの読み込み後にコンテンツを読み込む可能性があります(javascriptを使用)。この場合、Nokogiriは役に立ちません。もう少し洗練されたシステムが必要になります。おそらく、mechanizeを使用します

ただし、最終的には、スクレイピングするべきではありません。このサイトの所有者はそれを防ぐための方法を導入しており、あなたはそれを尊重する必要があります。APIを確認してください。

于 2012-09-03T14:48:12.080 に答える