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: p> 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. P> QUELQU'ONNE VOIR Connaître le problème ici? P> 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. P> P>
5 Réponses :
La ligne ne trouve aucune balise 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. P> p> code> s. Il pourrait y avoir un moyen d'utiliser
retranchée code>; Je ne suis pas sûr. Cependant, cela fonctionne: p>
Assez bien, merci! Quant à Findall, je suis sûr que je ne fais que référencer la variable code> 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.
Voici une version Python 2 de la réponse de Unutbu:
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 em> de l'attribut. Votre code recherche donc des balises avec un attribut de nom C'est pourquoi P> Pour résoudre le problème, passez l'attribut que vous recherchez en tant que dict code> dict code>: p> htt quelqu'un à l'avenir ,
dtk p> [0]: Bien qu'il soit nécessaire d'être attribut code>, car la variable ne se développe pas.
Find_All (style = true) code> dans votre exemple, sans citations, car
SyntaxError: mot-clé ne peut pas être un expression code> p> p>
J'utilise celui-ci: ou p> merci à https://stackoverflow.com/a/22497855/1907997 p> p>
J'utilise cette méthode pour supprimer une liste d'attributs, très compacte:
Pour moi, ça marche si
soupe.findall (attribut = true) code> est modifié simplement
soupe.findall () code>.
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.