使用Nokogiri / Mechanize存储和迭代链接数组

时间:2013-03-29 03:32:03

标签: ruby-on-rails ruby ruby-on-rails-3 nokogiri mechanize

我正在尝试将链接列表存储到数组中,然后遍历它们。

我有这个佣金任务:https://gist.github.com/farooqyousuf/5268460

目前,rake任务遍历一个页面并获取我需要的部分链接,但它不会提取它们 all

问题在于第17行。

我需要它page2.search('.subtitleLink a').each,但我无法在此处添加.each.map{|a| page2.uri.merge a[:href]}.each do |uri|。它给出了一个错误。

所以我认为我需要将page2.search('.subtitleLink a').each存储到数组中,然后在每次迭代(.map{|a| page2.uri.merge a[:href]}.each do |uri|)上迭代执行此代码,但我的尝试并没有成功。

选项1:

我试过了:

page2.search('.subtitleLink a').each do |x|      
  x.map{|a| page2.uri.merge a[:href]}.each do |uri|
    page4 = agent.get uri
  end   

但是我收到了这个错误:

rake aborted!
can't convert Symbol into Integer
/Users/farooqyousuf/Projects/HalalSpot/lib/tasks/something.rake:19:in `[]'

选项2:

                page2.search('.subtitleLink a').each do |x|

                    blah = URI.parse(URI.encode(x.to_s.strip))
                    page4 = agent.get blah

               end    

结果:

rake aborted!
bad URI(is not URI?): %3Ca%20href=%22http://www.salatomatic.com/d/Hartford+3115+Muhammad-Islamic-Center-%22%3E%3Cb%3EMuhammad%20Islamic%20Center%20%3C/b%3E%3C/a%3E

思想?

1 个答案:

答案 0 :(得分:0)

puts "Enter the page url from which you wish to import data: "
page = STDIN.gets
page2 = Nokogiri::HTML(open(page))

links = page2.css('.subtitleLink a')

links.each do |link| 
 puts link['href']
 url = link['href'].strip

 page4 = agent.get url

 #do stuff

end