Ruby chomp!.strip!在一条线上

时间:2016-03-18 16:09:23

标签: ruby web-scraping

我试图从网站上刮一张桌子。

status = recPage.css("#MainContent_GridView1").css("tr")[line].css("td")[2].text.chomp.strip

我收到了一些行的错误。

  

未定义的方法`strip' for nil:NilClass(NoMethodError)

  

未定义的方法`chomp' for nil:NilClass(NoMethodError)

所以我想我可以使用chomp!.strip!跳过nil值。但显然它不允许我把这两个放在一条线上。

有没有办法修改它?

3 个答案:

答案 0 :(得分:1)

怎么样:

status = recPage.css("#MainContent_GridView1").css("tr")[line].css("td")[2].text.chomp.strip rescue ""

它会将状态设置为"";

答案 1 :(得分:0)

您收到这些错误是因为有.text=nil的节点,chomp!strip!都是为了就地修改字符串,而不是忽略错误,它们会返回nil

最好的方法是检查文本的存在(不是oneliner,思考):

txt = recPage.css("#MainContent_GridView1").css("tr")[line].css("td")[2].text
txt = txt.chomp.strip if txt

在ruby 2.3+中你可以使用:

recPage.css("#MainContent_GridView1").css("tr")[line].css("td")[2].text&.chomp.&strip

rescue "" - 方法可能导致将来出现错误(如果此行中还有其他错误)

答案 2 :(得分:0)

如果你真的想要破坏性地做,你可以这样做:

...text&.tap(&:chomp!)&.tap(&:strip!)