kee*_*ron 16 html sanitize nokogiri
我正在使用nokogiri删除一个html页面,我想删除所有样式属性.
我怎样才能做到这一点?(我不使用rails所以我不能使用它的清理方法,我不想使用sanitize gem'因为我想黑名单删除而不是白名单)
html = open(url)
doc = Nokogiri::HTML(html.read)
doc.css('.post').each do |post|
puts post.to_s
end
=> <p><span style="font-size: x-large">bla bla <a href="http://torrentfreak.com/netflix-is-killing-bittorrent-in-the-us-110427/">statistica</a> blabla</span></p>
Run Code Online (Sandbox Code Playgroud)
我想要它
=> <p><span>bla bla <a href="http://torrentfreak.com/netflix-is-killing-bittorrent-in-the-us-110427/">statistica</a> blabla</span></p>
Run Code Online (Sandbox Code Playgroud)
Phr*_*ogz 19
require 'nokogiri'
html = '<p class="post"><span style="font-size: x-large">bla bla</span></p>'
doc = Nokogiri::HTML(html)
doc.xpath('//@style').remove
puts doc.css('.post')
#=> <p class="post"><span>bla bla</span></p>
Run Code Online (Sandbox Code Playgroud)
编辑表明你可以打电话NodeSet#remove而不必使用.each(&:remove).
请注意,如果你有一个DocumentFragment而不是Document,Nokogiri有一个长期存在的错误,即从片段中搜索不能像你期望的那样工作.解决方法是使用:
doc.xpath('@style|.//@style').remove
Run Code Online (Sandbox Code Playgroud)
这适用于文档和文档片段:
doc = Nokogiri::HTML::DocumentFragment.parse(...)
Run Code Online (Sandbox Code Playgroud)
要么
doc = Nokogiri::HTML(...)
Run Code Online (Sandbox Code Playgroud)
要删除所有"样式"属性,您可以执行
doc.css('*').remove_attr('style')
Run Code Online (Sandbox Code Playgroud)