尝试通过一系列带有css类标题的链接,然后单击这些链接,然后获取产品标题。但我一直收到错误undefined method each for #<Mechanize::Page::Link:0x007fbfe2524410> (NoMethodError)
?我不明白什么是错的?
继承我的代码:
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 :(得分:1)
来自机械化文档:
link_with(条件)
找到单个链接匹配条件。
您需要使用:
links_with(条件)
找到符合条件的所有链接。
错误消息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>
另一方面,Array确实有each()方法,所以你可以这样做:
[10, 20, 30].each do |number|
puts number
end