最近、gem watirを使用してRubyでスクラップスクリプトを作成しています。私は結果を.jsonファイルに入れていましたが、最近はMySQL2で作業を始めました。RubyでMySQL2を使用すると、未定義のローカル変数またはメソッド `client 'がmain:Object(NameError)になります。
id、job、linkの3つの列を持つリンクというテーブルを使用して、scrapという名前のdbを作成しました。私はこのために取り組んでいるスクリプトは非常に簡単です:それは、Google検索でクエリを作成し、すべてのリンクのURLを取って、次のページに行く。あなたはそれが非常に厄介だ見ることができるように
require "watir"
require "json"
require "mysql2"
b = Watir::Browser.new(:firefox)
client = Mysql2::Client.new(:host => "localhost", :username => "root", :password => "xxx", :database => "scrap", :encoding => "utf8")
def Launch(b)
job = "cabinet avocat"
ville = "paris"
k = 0
j = "avocat"
b.goto "https://www.google.fr/search?q="+"#{job}"+" "+"#{ville}" "&dcr=0&ei=1-quWY6BDouYgAb0tZq4CA&start="+"#{k}"+"&sa=N&biw=1280&bih=876"
loop do
l0 = b.div(class:"f kv _SWb", index:0).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l0}')");
l1 = b.div(class:"f kv _SWb", index:1).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l1}')");
l2 = b.div(class:"f kv _SWb", index:2).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l2}')");
l3 = b.div(class:"f kv _SWb", index:3).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l3}')");
l4 = b.div(class:"f kv _SWb", index:4).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l4}')");
l5 = b.div(class:"f kv _SWb", index:5).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l5}')");
l6 = b.div(class:"f kv _SWb", index:6).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l6}')");
l7 = b.div(class:"f kv _SWb", index:7).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l7}')");
l8 = b.div(class:"f kv _SWb", index:8).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l8}')");
l9 = b.div(class:"f kv _SWb", index:9).text
client.query("INSERT INTO links(job, link)
VALUES('#{j}, '#{l9}')");
k += 10
b.goto "https://www.google.fr/search?q="+"#{job}"+" "+"#{ville}" "&dcr=0&ei=1-quWY6BDouYgAb0tZq4CA&start="+"#{k}"+"&sa=N&biw=1280&bih=876"
break if k == 200
end
end
Launch(b)
、私はそれを承知しているし、これは、すぐに私はそれが仕事を得るように固定されますので、ここで少年です。
test.rb:17:in `block in Launch': undefined local variable or method `client' for main:Object (NameError)
from test.rb:15:in `loop'
from test.rb:15:in `Launch'
from test.rb:62:in `<main>'
私はかなりどこでも検索しましたし、私の問題への解決策を見つけることができていない、私はするために、ここでアカウントを作成した理由です:私はそれを実行するときに、それは私が取得エラーです他人の質問を見るだけでなく、自分自身を投稿する。
は皆
における第二の属性として割り当てます。 (1) 'client'の宣言を' Launch'メソッドに移すか、または(2)メソッドを再定義してクライアントをパラメータとして渡すか、 'Launch(b、client)'のいずれかです。 –