使用 MySQL2 和 Ruby 为 main:Object 获取未定义的局部变量或方法“客户端”(NameError)

Using MySQL2 with Ruby gets me undefined local variable or method `client' for main:Object (NameError)

所以我最近一直在使用 gem watir 使用 Ruby 编写一些抓取脚本。我曾经将结果放在 .json 文件中,但最近我开始使用 MySQL2。所以这是交易:

我创建了一个名为 scrap 的数据库,其中有一个名为 links 的 table,它有 3 列:id、job、link。我为此编写的脚本非常简单:它对 google 搜索进行查询,获取所有 link 的 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>'

我到处搜索都找不到解决问题的方法,这就是为什么我在这里创建了一个帐户,以便不仅可以查看其他人的问题,还可以 post 我自己的。

谢谢大家

client 超出 Launch 方法的范围。

使其成为全局 @client 或指定为 Launch(b, launch)

中的第二个属性