【发布时间】:2016-08-15 10:09:28
【问题描述】:
我一直在 Ruby on Rails 上开发一个爬虫,它使用 Capybara/Poltergeist 将数据保存到 MongoDB 数据库中的模型属性中。然而,数据集很大,需要花费很多时间,有时我可能会分心,比如互联网连接,不得不从头开始。您能否帮我找到一种方法,让应用程序继续从我上次离开的位置向数据库插入元素。
我的代码的简化摘录是:
naming.each_with_index do |namee, j|
@component=Compo.new
@component[:component]=gnamees[j]
@component[:partname]=Array.new
@session.execute_script("javascript:onSelectPart(#{namee[24..37]});")
sleep 2
@session.within_frame('content_consist') do
sleep 3
@session.within("form[name=ConsistList]") do
@session.all('input').each do |z|
@component[:partname] << z.value
end
end
end
@component.save
@session.driver.clear_memory_cache
end
每个这样的@komponent 在 MongoDB 中保存为:
{ "_id" : ObjectId("57ad5b7f678208560bcb21bd"), "component" : "2U-9747 - WARNING GP-WIDE VEHICLE", "partname" : [ "PLATE-MARKER WIDTH ", "BOLT ", "NYLOC NUT ", "WASHER ", "PLATE MARKER FRONT ", "PLATE MARKER FRONT ", "SCREW DRIVE PAN " ]}
我希望应用查看最新的数据库条目,并在最后一个之后继续添加新元素,而不是从一开始就启动爬虫。
谢谢。
【问题讨论】:
-
如果您将数据保存在数据库中,重新连接到数据库并重新获取应该不会占用大量资源。这取决于你在做什么。你还没有真正解释你的代码足以确定。
-
我正在抓取一个包含有关汽车零件信息的 JS 密集型网站。我的代码遍历所有汽车并提取它们的汽车零件列表并将它们保存为对象实例。那么,提货情况如何?
-
在您执行单个操作(例如写入记录)后,您的数据库将处于有限步中。如何使应用程序状态匹配数据库状态是一个个性化的问题。重新连接时,您到底有什么难以“接受”的问题?
-
我希望能够停下来,关掉电脑,下次继续打码。
标签: javascript ruby-on-rails ruby mongodb capybara