rails mechanize在postgres表中遍历每个url

时间:2012-11-06 15:55:07

标签: ruby-on-rails postgresql mechanize

*编辑: 根据我在下面的评论,我想一个更好的问题是,'机械化通过每个网址并更新其名称列的正确方法是什么? (每个名称对于网址都是唯一的)'以下是我一直在进行的练习。 *


我有一张像...一样的postgres表 | name(string)|网址(文字)|

url列已经填充了各种url,看起来像这样: http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Register/Default.aspx

我正在尝试运行一个机械化rake任务,该任务将遍历每个url,并根据它在css标记中找到的文本更新名称。

namespace :db do
  desc "Fetch css from db urls"
  task :fetch_css => :environment do

    require 'rubygems'
    require 'mechanize'
    require 'open-uri'

    agent = Mechanize.new
    url = Mytable.pluck(:url)
    agent.get(url)
    agent.page.search('#dnn_ctr444_ContentPane').each do |item|
      name = item.css('.EventNextPrev:nth-child(1) a').text
      Mytable.update(:name => name)
    end 
  end
end

当我运行rake任务时,它返回:

rake aborted!
bad URI(is not URI?): %255B%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/Default.aspx%2522,%2520%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Privacy/Default.aspx%2522,%2520%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Terms/Default.aspx%2522,%2520%2522http://www.a4apps.com/Websites/SampleCalendar/tabid/89/ctl/Register/Default.aspx%2522%255D

感谢您的帮助。如果我有任何方法可以让问题更容易回答,请告诉我。 麦克

1 个答案:

答案 0 :(得分:1)

我最近在回答自己的问题时感到有些孤独,但如果其他人发现自己处于相同的约束状态,我会发布我的答案。此外,也许其他人会告诉我,如果我的解决方案有任何致命的缺陷,我还没有看到。这是我的最终rake似乎正在工作,从我的表中获取URL,在它们上运行机械化并使用在URL上找到的信息更新表...

namespace :db do
  desc "Fetch css from db urls"
  task :fetch_css => :environment do

    Mytable.all.each do |info|  # for each row do...
      require 'rubygems'
      require 'mechanize'
      require 'open-uri'
      agent = Mechanize.new
      agent.get(info.url)             # get the url column data for the current db row...
      nombre = agent.page.search('.EventNextPrev:nth-child(1) a').text  # plug it into mech.
      info.update_attributes(:name => nombre)  # and update the db with the css result.
    end

  end
end

感谢。 麦克