0

Web ショップの HTML 記事ページをスクレイピングするスクリプトがあります。私は 22 ページのセットでテストしています。そのうちの 5 つの記事ページには製品の説明があり、他のページにはありません。

このコードは正しい情報を画面に表示します:

if doc.at_css('.product_description')
  doc.css('div > .product_description > p').each do |description|
    puts description
  end
  else
    puts "no description"
end

しかし今、私はこれを正しく取得して、見つかった製品の説明をCSVファイルに書き込んでいる場所から配列に出力する方法にこだわっています。

いくつかのオプションを試しましたが、今のところどれも機能しません。puts descriptionforを置き換えると@description << description.content、その行の記事には属していませんが、記事のすべての説明が CSV の上部の行に表示されます。

「説明なし」も置き換える@description = "no description"と、CSV の最初の 14 行がそれぞれ「説明なし」の文字を 1 文字受け取ります。おかしいように見えますが、それはまさに私が必要としているものではありません。

さらにコードが必要な場合は、叫んでください。

これは、スクリプトで使用する CSV コードです。

    CSV.open("artinfo.csv", "wb") do |row|
    row << ["category", "sub-category", "sub-sub-category", "price", "serial number",  "title", "description"]
    (0..@prices.length - 1).each do |index|
    row << [
            @categories[index], 
            @subcategories[index], 
            @subsubcategories[index], 
            @prices[index],
            @serial_numbers[index], 
            @title[index],
            @description[index]]
     end 
    end  
4

1 に答える 1

0

データが正しく配置されていないようです。もしそうなら、あなたはできるはずです:

CSV.open("artinfo.csv", "w") do |csv|
  csv << ["category", "sub-category", "sub-sub-category", "price", "serial number",  "title", "description"]
  [@categories, @subcategories, @subsubcategories, @prices, @serial_numbers, @title, @description].transpose.each do |row|
    csv << row
  end 
end
于 2013-03-29T00:15:06.867 に答える