加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 当使用Nokogiri查找带有文本的链接时,如何避免

发布时间:2020-12-17 03:10:40 所属栏目:百科 来源:网络整理
导读:我正在使用Rails 5和 Ruby 4.2并扫描我用Nokogiri解析的文档,以不区分大小写的方式查找带有文本的链接: a_elt = doc ? doc.xpath('//a').detect { |node| /link[[:space:]]+text/i === node.text } : nil 在内容中获取我的网页的HTML后,我使用以下方法将其
我正在使用Rails 5和 Ruby 4.2并扫描我用Nokogiri解析的文档,以不区分大小写的方式查找带有文本的链接:

a_elt = doc ? doc.xpath('//a').detect { |node| /link[[:space:]]+text/i === node.text } : nil

在内容中获取我的网页的HTML后,我使用以下方法将其解析为Nokogiri文档:

doc = Nokogiri::HTML(content)

问题是,我得到了

ArgumentError invalid byte sequence in UTF-8

在使用上述正则表达式的某些网页上.

2.4.0 :002 > doc.encoding
 => "UTF-8" 
2.4.0 :003 > doc.xpath('//a').detect { |node| /individual[[:space:]]+results/i === node.text }
ArgumentError: invalid byte sequence in UTF-8
    from (irb):3:in `==='
    from (irb):3:in `block in irb_binding'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:187:in `block in each'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:186:in `upto'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:186:in `each'
    from (irb):3:in `detect'
    from (irb):3
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
    from /Users/davea/.rvm/gems/ruby-2.4.0@global/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

有没有办法我可以重写上面的内容来自动解释编码或奇怪的字符而不是翻出来?

解决方法

您的问题可能已经在之前得到了解答.你试过“ Is there any way to clean a file of “invalid byte sequence in UTF-8” errors in Ruby?”的方法吗?

特别是在检测块之前,尝试删除除新行之外的无效字节和控制字符:

doc.scrub!("")
doc.gsub!(/[[:cntrl:]&&[^nr]]/,"")

记住,擦洗!是Ruby 2.1+ method.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读