解決済み

RubyでCSVファイルの1行目を削除したい 

  • すぐに回答を!
  • 質問No.8747971
  • 閲覧数950
  • ありがとう数12
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 71% (5/7)

Rubyの初心者でSeleniumを使ってスクレイピングを趣味としてしているものです。
ブラウザはchromeです。

この間、例外が上がったときに一定回数リトライする方法をご伝授頂きました。
http://okwave.jp/qa/q8722965.html

そしてそれを活用して、CSVにスクレイピングをしたいURLを1列目に並べ、複数のページをスクレイピングしているのですが、

def try(n=10)

require 'pp'
require 'csv'
require 'selenium-webdriver'
require 'open-uri'



hoge_path = File.expand_path('../hoge.csv',__FILE__)

driver = Selenium::WebDriver.for :chrome #chrome のdriverを設定

CSV.foreach(hoge_path) do |row|


driver.navigate.to row[1] #URL移動

#ページの移動など

driver.quit #ブラウザ終了

driver = Selenium::WebDriver.for :chrome #chrome のdriverを設定

end



rescue => e
if n==0
raise e
driver.quit #ブラウザ終了

else
driver.quit #ブラウザ終了

try(n-1)
end
end


try

よく仕組みを理解できていないのですが、CSV.foreach内はループされます。
そして、404エラーなどで落ちるとまた一行目に戻ってスクレイピングが行われ、非常に困っています。

そこで、CSVファイルの1行目をループするまたは例外のリトライの際に削除していけば良いと考えたのですが、一行目を削除するというコードをどう書けばいいのか分かりません。

どうかご伝授お願いします。

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 48% (4417/9107)

>:in `block in <main>': undefined local variable or method `try' for main:Object (NameError)

タイプミスじゃないですか?
ミスが見つかるまでもう一度よく見直しましょう。

前回の質問の回答にに書いたかもしれませんが、
もっとやさしいプログラムを書くことから始めた方が良いように思います。
お礼コメント
kann3589

お礼率 71% (5/7)

いつもありがとうございます。
いじくりすぎた物のエラーを提示していました。

hoge.rb:19:in `block in <main>': undefined method `try' for main:Object (No
MethodError)

どうやらtryが定義されていない?のようでエラーが出ます。
今更、def tryの前にCSV.foreach内で登場している為、だと思って見た所、後ろにしてみた所、上手く実行する事が出来ました。
まだrubyが理解できていないので暇が出来たら簡単なプログラムを練習して見たいと思います。
今回もありがとうございました。
投稿日時 - 2014-09-13 11:59:33

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 48% (4417/9107)

何をしたいのかの整理が不十分な感じですね。

やりたいのは、こんな感じではないでしょうか。

require 'pp'
require 'csv'
require 'selenium-webdriver'
require 'open-uri'

hoge_path = File.expand_path('../hoge.csv',__FILE__)
CSV.foreach(hoge_path) do |row|
try(row[1])
end


def try(url, n=10)
driver = Selenium::WebDriver.for :chrome #chrome のdriverを設定
driver.navigate.to url #URL移動
#ページの移動など
driver.quit #ブラウザ終了
rescue => e
driver.quit #ブラウザ終了
if n==0
raise e
else
try(url,n-1)
end
end


ところで、File.expand_path('../hoge.csv',__FILE__) は変ですね。
File.expand_path('hoge.csv',File.dirname(__FILE__)) か。
最近のバージョンなら、File.expand_path('hoge.csv', __dir__)
補足コメント
kann3589

お礼率 71% (5/7)

回答ありがとうございます。
どうやら:in `block in <main>': undefined local var
iable or method `try' for main:Object (NameError)

となってしまい実行することが出来ません。
よろしくお願いします。
投稿日時 - 2014-09-12 12:34:10
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ