2015-06-08 79 views
1

我想刮一个网站,其中有多个页面的结果,如“1,2,3,4,5 ...”。 每个分页号码是一个链接到另一个页面,我需要刮每页。 到目前为止,我想出了这一点:刮,按分页链接

while lien = page.link_with(:text=> link_number.to_s) 
      link_number = link_number + 1 
      body = page.body 
      html_body = Nokogiri::HTML(body) 
      html_body.css('#personne tbody tr').each do |person| 
       puts person.css('td').first.text.to_s 
      end 
      page = lien.click 
      end 

但这从来没有废料的最后一页。

请帮我写一些更好的代码来擦掉最后一页。

+0

欢迎堆栈溢出。请提供一个HTML的_minimal_示例,演示您正在尝试处理的内容。另外,当使用Mechanize时,使用'Nokogiri :: HTML(body)'来获取HTML的DOM是必须的。 Mechanize已经使用Nokogiri,您可以轻松访问其内部DOM。 –

回答

1

问题是,在最后一页上将不会有链接到下一页。因此,while语句的条件评估为nil,因此while的主体不被执行。

至于建议here你需要这样的事:

loop do 
    lien = page.link_with(:text=> link_number.to_s) 
    link_number = link_number + 1 
    page.parser.css('#personne tbody tr').each do |person| 
    puts person.css('td').first.text.to_s 
    end 
    break unless lien 
    page = lien.click 
end