2014-10-01 22 views
0

我正在嘗試通過一系列帶有CSS類標題的鏈接,然後點擊這些鏈接,然後獲取產品標題。但我不斷收到錯誤undefined method each for #<Mechanize::Page::Link:0x007fbfe2524410> (NoMethodError)?我不明白什麼是錯誤的?如何使用Mechanize來查看每個鏈接?

繼承人我的代碼:

require 'mechanize' 


file = File.new("outputscrape.txt", 'w') 

agent = Mechanize.new { |agent| 
       agent.user_agent_alias = 'Windows Chrome'} 


page = agent.get('http://www.amazon.com/s/ref=sr_nr_n_0?rh=n%3A283155%2Cn%3A%211000%2Cn%3A5%2Cn%3A15377001%2Cn%3A6133979011%2Cn%3A6133980011&bbn=6133979011&ie=UTF8&qid=1412193262&rnid=6133979011') 

title_link = page.link_with(:dom_class => "title") 

title_link.each do |link| 

    link.click 
    file.write(link.at('#productTitle').text.strip) 

end 
+0

'.each'塊之前'title_link'的值是什麼? – Anthony 2014-10-01 20:59:15

+0

正在嘗試存儲標題書頁的鏈接,然後使用它們對它們進行迭代,點擊它們並取出書的標題。 – user3131148 2014-10-01 21:34:57

+0

在運行'title_link.each'之前,你可以添加'puts title_link'。運行該程序並告訴我返回的結果 – Anthony 2014-10-01 21:44:42

回答

1

從機械化文檔:

link_with(criteria)
Find a single link matching criteria.

您需要使用:

links_with(criteria)
Find all links matching criteria.

在錯誤消息中提到的對象,Page::Link

undefined method each for #<Mechanize::Page::Link:0x007fbfe2524410> (NoMethodError)

聽起來不只是一件事,是嗎?不止一件事更像是Page :: Links或Page :: Link :: Group或Page :: LinkSet。你是做等價的:

10.each do |number| 
    puts number 
end 

然而,數字不具有each()方法,使產生錯誤:

undefined method `each' for 10:Fixnum (NoMethodError) 

與此相比,你的錯誤:

undefined method each for #<Mechanize::Page::Link:0x007fbfe2524410> 

另一方面,陣列確實有each()方法,因此您可以這樣做:

[10, 20, 30].each do |number| 
    puts number 
end 
相關問題