undefined方法`click'表示“2”:String,使用Mechanize时出现Rails错误

时间:2017-06-06 19:39:51

标签: ruby-on-rails ruby web-scraping nokogiri mechanize

class ScraperController < ApplicationController

 def show
  mechanize = Mechanize.new

  website = mechanize.get('https://website.com/')
  $max = 2
  $counter = 0
  $link_to_click = 2

  @names = []

  while $counter <= $max do
    @names.push(website.css('.memName').text.strip)
    website.link_with(:text => '2').text.strip.click
    $link_to_click += 1
    $counter += 1
  end
 end
end 

我试图从每个页面中删除20个项目,然后单击底部的链接(1,2,3,4,5等)。但是,我收到标题中显示的错误,告诉我我无法单击该字符串。因此它识别按钮'2'存在,但会告诉我是否无法点击它。理想情况下,一旦这个被整理出来,我想使用$ link_to_click变量作为替换'2'的方法,以便它每次都会递增,但它总是以nil的形式返回。我也将它改为.to_s,结果相同。

如果我同时删除所有点击,它将刮取同一页面3次,而不是移动到下一页。我还在.click之前删除了text.strip部分,它会做同样的事情。我尝试了很多变化,但没有运气。

我非常感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:1)

我最后审查了我引用的文章以解决这个问题并得出了这个结论。

我将website_link更改为website = website.link_with(:text => $link_to_click.to_s).click(因为它只作为字符串工作)并打印出第一页,第二页以及之后的每一页。

这些是我参考的文章,了解如何执行此操作。

http://docs.seattlerb.org/mechanize/GUIDE_rdoc.html

https://readysteadycode.com/howto-scrape-websites-with-ruby-and-mechanize