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行目をループするまたは例外のリトライの際に削除していけば良いと考えたのですが、一行目を削除するというコードをどう書けばいいのか分かりません。
どうかご伝授お願いします。
No.2ベストアンサー
- 回答日時:
>:in `block in <main>': undefined local variable or method `try' for main:Object (NameError)
タイプミスじゃないですか?
ミスが見つかるまでもう一度よく見直しましょう。
前回の質問の回答にに書いたかもしれませんが、
もっとやさしいプログラムを書くことから始めた方が良いように思います。
いつもありがとうございます。
いじくりすぎた物のエラーを提示していました。
hoge.rb:19:in `block in <main>': undefined method `try' for main:Object (No
MethodError)
どうやらtryが定義されていない?のようでエラーが出ます。
今更、def tryの前にCSV.foreach内で登場している為、だと思って見た所、後ろにしてみた所、上手く実行する事が出来ました。
まだrubyが理解できていないので暇が出来たら簡単なプログラムを練習して見たいと思います。
今回もありがとうございました。
No.1
- 回答日時:
何をしたいのかの整理が不十分な感じですね。
やりたいのは、こんな感じではないでしょうか。
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)
となってしまい実行することが出来ません。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) パイソン。スクレイピング。Chromeドライバーの使い方を教えてください。 1 2023/06/14 21:55
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
- Visual Basic(VBA) excel vbaでselenium basic 3 2022/10/02 12:35
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
ファイル名を変数で書きこむfwr...
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
バッチコマンドで指定行を抽出...
-
VBAで複数のCSVからレコードセ...
-
シート内容の文字列を置換してV...
-
複数のファイルをまたぐエクセ...
-
rubyを用いたCSVファイルの分割...
-
VBScript等で、CSV内の各文字列...
-
pythonでリストをCSVに出力する...
-
CSVで余計な空行が入る
-
Access VBA エラー2448について
-
バッチ処理 特定の文字以降を...
-
pycharmへのpysamインストール...
-
MS-DOSバッチファイルコマンド...
-
C# ファイルを読み込みlistvie...
-
■PukiWikiの凍結解除方法を教え...
-
SQLファイルの読み込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
Excelマクロ 空白セルを無視し...
-
ダブルコーテーション付きでCSV...
-
VBAでcsvファイルもシートもあ...
-
ファイル名を変数で書きこむfwr...
-
VB.netでShellExecuteがしたい
-
EXCEL→CSV保存時のダブルクォー...
-
複数のファイルをまたぐエクセ...
-
pythonでリストをCSVに出力する...
-
【C#】 csvファイルをバイナリ...
-
VBAで複数のCSVからレコードセ...
-
rubyを用いたCSVファイルの分割...
-
CSVデータの文字列置換
-
エクセルVBA Application.GetSa...
-
パイソン文法で ファイルオープ...
-
Rubyを使用してcsvファイルを処...
-
vbaマクロについて 次のような...
-
CSVファイルの比較と結果の取得...
-
fortranでデータの抜き出しをし...
-
コマンドプロンプトでファイル...
おすすめ情報