如何解析Ruby数组中的数据?

时间:2015-07-24 00:58:44

标签: ruby postgresql watir-webdriver

我使用watir-webdriver从网站上抓取数据。当我尝试将数据导入数据库时​​,我得到错误"无法将数组转换为文本"。

def get_event_details(url)
    headless = Headless.new
    headless.start
    b = Watir::Browser.start "http://example.com"
    @event = event ={}
    if event_detail = get_html_from_url(url)
      event["title"] = b.spans(:class => "classname").collect &:text
      event["source_url"] = b.split("&year")[0] if b.include?("&year") rescue b
      event["timezone"] = 'HST'
      event
    end
    puts event
    return event
    b.close
    headless.destroy
end

导入的数据如下所示:

{"title"=>["1", "2", "3"]}

我添加了这段代码后

event["title"] = b.spans(:class => "classname").collect.map { |i| "'" + i.text + "'" }.join(", ")

我不再收到错误,但每个标题都插入到数据库的同一列中。现在导入的数据如下所示:

{"title"=>"'1', '2', '3'"}

我不确定如何解决这个问题。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您需要为标题单独插入,并通过" event.id"将它们与事件相关联。或类似的。

如果您提供数据库插入代码,可以给出更精确的帮助!

答案 1 :(得分:0)

据我了解, 你有哈希:

{"title"=>["1", "2", "3"], "source_url"=>["http://ex1.com", "http://ex2.com", "http://ex3.com"], "timezone"=>"HST"}

您需要向db添加如下内容:

+------+------+--------+
|title |source|timezone|
+------|------|--------+
|  1   | ex1  |   HST  |
+------|------|--------+
|  2   | ex2  |   HST  |
+------+------+--------+

等。 如果这是真的,那么,你只需要:

[a['title']].map(&:size).max.times.each { |i|
    db.query("INSERT INTO some_db(title, source_url, timezone) VALUES ('#{a['title'][i]}', '#{a['source_url'][i]}', '#{a['timezone']}') ")
}

P.S。我在这个例子中使用mysql db