10
votes

Beautifulsoup: des attributs spécifiés en bande, mais préserve la balise et son contenu

J'essaie de «défrontez» le HTML d'un site Web généré par MS FrontPage, et j'écris un script magnifique pour le faire.

Cependant, je suis resté coincé sur la partie où j'essaie de dépouiller un attribut particulier (ou des attributs de liste) de chaque balise du document qui les contient. L'extrait de code: xxx

il fonctionne sans erreur, mais ne dépasse aucun des attributs. Lorsque je l'exécute sans la boucle extérieure, il suffit de coder un seul attribut (Soupe.FindAll (Style '= true), ça marche.

QUELQU'ONNE VOIR Connaître le problème ici?

PS - Je n'aime pas beaucoup les boucles imbriquées non plus. Si quelqu'un connaît un style plus fonctionnel, map / filtre-ish, j'aimerais le voir.


2 commentaires

Pour moi, ça marche si soupe.findall (attribut = true) est modifié simplement soupe.findall () .


Belle prise, qui fonctionne effectivement. Pretty évident à l'arrière, n'avez pas besoin de vérifier la valeur de l'attribut deux fois. Seul problème est qu'il vérifie tous les attributs de chaque balise de la doc, et prend deux fois de temps à courir, mais 5s VS 2.5 pour ~ 15 pages n'est pas une grosse affaire ici.


5 Réponses :


9
votes

La ligne xxx

ne trouve aucune balise s. Il pourrait y avoir un moyen d'utiliser retranchée ; Je ne suis pas sûr. Cependant, cela fonctionne: xxx

Notez que ce code ne fonctionnera que dans Python 3. Si vous en avez besoin pour travailler à Python 2, reportez-vous à la réponse de Nóra ci-dessous.


1 commentaires

Assez bien, merci! Quant à Findall, je suis sûr que je ne fais que référencer la variable la variable de la variable de la variable, car le nom d'attribut est difficile dans sa place fonctionne. Travera cela plus sur le passé suivant, après avoir obtenu l'ensemble du script.



6
votes

Voici une version Python 2 de la réponse de Unutbu: xxx


0 commentaires

6
votes

juste FTR: le problème ici est que si vous passez des attributs HTML en tant qu'arguments de mots clés, le mot-clé est le nom de l'attribut. Votre code recherche donc des balises avec un attribut de nom attribut , car la variable ne se développe pas.

C'est pourquoi

  1. codage rigoureux Votre nom d'attribut a fonctionné [0]
  2. Le code n'a pas échoué. La recherche ne correspond à aucune balise

    Pour résoudre le problème, passez l'attribut que vous recherchez en tant que dict dict : xxx

    htt quelqu'un à l'avenir , dtk

    [0]: Bien qu'il soit nécessaire d'être Find_All (style = true) dans votre exemple, sans citations, car SyntaxError: mot-clé ne peut pas être un expression


0 commentaires

1
votes

J'utilise celui-ci: xxx

ou xxx

merci à https://stackoverflow.com/a/22497855/1907997


0 commentaires

2
votes

J'utilise cette méthode pour supprimer une liste d'attributs, très compacte: xxx


0 commentaires