我使用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'"}
我不确定如何解决这个问题。有什么想法吗?
答案 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