dポイントプレゼントキャンペーン実施中!

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

この間、例外が上がったときに一定回数リトライする方法をご伝授頂きました。
http://oshiete.goo.ne.jp/qa/8722965.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行目をループするまたは例外のリトライの際に削除していけば良いと考えたのですが、一行目を削除するというコードをどう書けばいいのか分かりません。

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

A 回答 (2件)

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



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

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

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

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

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



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

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__)

この回答への補足

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

となってしまい実行することが出来ません。
よろしくお願いします。

補足日時:2014/09/12 12:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!