Bande attributs de style avec nokogiri
Je suis scrapling une page html avec nokogiri et je tiens à dépouiller tous les attributs de style.
Comment puis-je y parvenir? (je ne suis pas à l'aide de rails donc je ne peux pas utiliser de désinfecter méthode et je ne veux pas utiliser les désinfecter gem 'parce que je veux les supprimer de la liste noire pas de liste blanche)
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>
Je veux qu'il soit
=> <p><span>bla bla <a href="http://torrentfreak.com/netflix-is-killing-bittorrent-in-the-us-110427/">statistica</a> blabla</span></p>
OriginalL'auteur keepitterron | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
Édité pour montrer que vous pouvez simplement appeler
NodeSet#supprimer
au lieu d'avoir à utiliser.each(&:remove)
.Notez que si vous avez un DocumentFragment au lieu d'un Document, Nokogiri a un bug de longue date, où la recherche à partir d'un fragment ne fonctionne pas comme vous le souhaiteriez. La solution de contournement consiste à utiliser:
Utilisation
doc.xpath('.//@style').remove
pour supprimer tous les styles en ligne à partir de tous les nœuds, l'avis de la.
au début, comme mentionné par @bricker ci-dessous. Chaîne.to_s
pour obtenir le html résultant de la chaîne.Correction: Ne pas la chaîne, mais l'utilisation
description.to_s
pour obtenir le html résultant de la chaîne. Si vous ne voulez pas leDOCTYPE
vous devez utiliser leNokogiri::HTML.fragment
méthode au lieu de cela, reportez-vous à stackoverflow.com/questions/4723344/...OriginalL'auteur Phrogz
Cela fonctionne avec à la fois un document et un fragment de document:
ou
Pour supprimer tous les attributs de 'style', vous pouvez faire un
OriginalL'auteur PlagueHammer
J'ai essayé la réponse de Phrogz, mais ne pouvait pas le faire fonctionner (j'ai été en utilisant un fragment de document, bien, mais j'aurais pensé qu'il devrait fonctionner de la même?).
Le "//" au début ne semble pas être la vérification de tous les nœuds que je m'attends. Au final, j'ai fait quelque chose d'un peu plus longue haleine, mais cela a fonctionné, donc ici pour l'enregistrement dans le cas où quelqu'un d'autre a le même problème c'est ma solution (sale si elle est):
Acclamations
Pete
body_dom.xpath('.//@class')
(avis de l'extra point au début de la xpath)Nokogiri et/ou LibXML2 ont un bug avec XPath à l'intérieur des fragments. La meilleure solution de contournement pour les fragments, c'est comme vous l'avez remarque: au lieu de
//foo
vous devez utiliserfoo|.//foo
.OriginalL'auteur Pete Duncanson